6

我一直在使用PyGTK FAQ中提供的答案,但这似乎不适用于 PyGObject。为方便起见,这里有一个适用于 PyGTK 的测试用例,然后是一个不适用于 PyGObject 的翻译版本。

PyGTK 版本:

import gtk

def raise_window(widget, w2):
    w2.window.show()

w1 = gtk.Window()
w1.set_title('Main window')
w2 = gtk.Window()
w2.set_title('Other window')

b = gtk.Button('Move something on top of the other window.\nOr, minimize the'
               'other window.\nThen, click this button to raise the other'
               'window to the front')
b.connect('clicked', raise_window, w2)

w1.add(b)

w1.show_all()
w2.show_all()

w1.connect('destroy', gtk.main_quit)
gtk.main()

PyGObject 版本:

from gi.repository import Gtk

def raise_window(widget, w2):
    w2.window.show()

w1 = Gtk.Window()
w1.set_title('Main window')
w2 = Gtk.Window()
w2.set_title('Other window')

b = Gtk.Button('Move something on top of the other window.\nOr, minimize the'
               'other window.\nThen, click this button to raise the other'
               'window to the front')
b.connect('clicked', raise_window, w2)

w1.add(b)

w1.show_all()
w2.show_all()

w1.connect('destroy', Gtk.main_quit)
Gtk.main()

当我单击 PyGObject 版本中的按钮时,没有弹出另一个窗口,并且出现此错误:

Traceback (most recent call last):
  File "test4.py", line 4, in raise_window
    w2.window.show()
AttributeError: 'Window' object has no attribute 'window'

所以我想一定有其他方法可以在 PyGObject 中获取 Gdk.window 吗?

还是有一些不同/更好的方式来实现相同的目标?

有任何想法吗?

4

3 回答 3

8

如本文所述有两种选择:

暂时升起窗户(可能是你要找的东西):

def raise_window(widget, w2):
    w2.present()

永久升起窗口(或直到被配置明确更改):

def raise_window(widget, w2):
    w2.set_keep_above(True)
于 2012-01-29T16:29:43.067 回答
3

present暂时加薪对我不起作用,但这确实:

win.set_keep_above(True)
win.set_keep_above(False)
于 2015-01-14T13:08:30.750 回答
1

这对我最有效:

在应用程序启动时将窗口置于前面,然后正常运行

win.set_keep_above(True)  # if used alone it will cause window permanently on top
win.show_all()  # show your window, should be in the middle between these 2 calls
win.set_keep_above(False) # disable always on top

使用这些不起作用

win.show_all()
win.set_keep_above(True)
win.set_keep_above(False)
于 2020-05-16T18:00:36.297 回答