打开PyGTK程序但不激活它

3 投票
2 回答
529 浏览
提问于 2025-04-15 18:30

我有一个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 个回答

1

先创建窗口,但在它准备好被激活之前,不要调用 show()。然后可以使用 self.window.present() 来显示它。

编辑:如果你根本不想让这个窗口被激活,那为什么不试试通知弹窗呢?这需要用到 libnotify。Python 也有相关的库可以使用。这里有个例子: http://roscidus.com/desktop/node/336

如果和工具栏小程序结合使用,这样就可以实现你想要的效果——也就是说,当用户点击小程序或者按下某个组合键时,就会弹出通知。

1

这段内容是来自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()

撰写回答