如何在pygtk中异步运行gtk.main()?
我现在有的基本代码如下。请问我该如何让gtk.main()在一个线程中运行,这样在Display初始化之后的代码就可以异步执行了呢?
import pygtk
pygtk.require("2.0")
import gtk
class Display():
def __init__(self):
self.fail = "This will fail to display"
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", lambda w: gtk.main_quit())
window.show()
self.main()
def main(self):
gtk.main()
class Test():
def __init__(self, display):
print display.fail
d = Display()
t = Test(d)
2 个回答
0
你可以使用Twisted配合gtk2reactor。
http://twistedmatrix.com/documents/current/core/howto/choosing-reactor.html
0
只需要把 gtk.main
这个调用放在其他所有代码的后面就可以了。如果你需要把控制器放在一个单独的线程里,确保所有和 gtk 相关的功能或方法都是通过 gobject.idle_add(widget.method)
来执行的。
import pygtk
pygtk.require("2.0")
import gtk
class Display(object):
def __init__(self):
self.fail = "This will fail to display"
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("destroy", lambda w: gtk.main_quit())
window.show()
class Test(object):
def __init__(self, display):
print display.fail
d = Display()
t = Test(d)
gtk.main()