打开PyGTK程序但不激活它
我有一个PyGTK程序,大部分时间它是隐藏的,但我希望通过按一个键可以让它弹出来。因此,我想让这个程序在打开时不被激活。我尝试了几种方法,但都没有成功:
self.window.show()
self.window.set_focus(None)
这个方法会激活程序,但没有设置焦点。
self.window.set_accept_focus(False)
self.window.show()
self.window.set_accept_focus(True)
用最后一个命令,窗口还是被激活了。
self.window.show()
self.window.unset_flags(gtk.HAS_FOCUS)
这个方法没有任何效果……
顺便说一下,我使用的是Ubuntu 9.10(metacity)。
2 个回答
先创建窗口,但在它准备好被激活之前,不要调用 show()
。然后可以使用 self.window.present()
来显示它。
编辑:如果你根本不想让这个窗口被激活,那为什么不试试通知弹窗呢?这需要用到 libnotify。Python 也有相关的库可以使用。这里有个例子: http://roscidus.com/desktop/node/336
如果和工具栏小程序结合使用,这样就可以实现你想要的效果——也就是说,当用户点击小程序或者按下某个组合键时,就会弹出通知。
这段内容是来自StackOverflow的讨论,具体的内容没有提供,但我可以告诉你,StackOverflow是一个程序员交流问题和解决方案的地方。在这里,大家可以提问,分享自己的经验,或者寻找别人遇到的类似问题的答案。
如果你在学习编程,遇到不懂的地方,可以在这个网站上搜索相关问题,通常能找到很多有用的信息和解决办法。
记得在提问时,尽量描述清楚你遇到的问题,这样别人才能更好地帮助你哦!
I figured out how to do it. See the example below:
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import gobject
class HelloWorld:
window=None
def hello(self, widget, data=None, data2=None):
HelloWorld.window.set_accept_focus(True)
HelloWorld.window.present()
def __init__(self):
HelloWorld.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.button = gtk.Entry(50)
self.button.connect("focus-in-event", self.hello, None)
HelloWorld.window.add(self.button)
self.button.show()
HelloWorld.window.set_accept_focus(False)
self.button.connect('button-press-event', self.hello)
HelloWorld.window.show()
def main(self):
gtk.main()
if __name__ == "__main__":
hello = HelloWorld()
hello.main()