如何在pygtk中异步运行gtk.main()?

0 投票
2 回答
1337 浏览
提问于 2025-04-15 14:08

我现在有的基本代码如下。请问我该如何让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

只需要把 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()

撰写回答