如何绕过python中gtk事件循环的阻塞行为

时间:2012-09-13 05:19:38

标签: gtk pygtk gtk2

我已将问题简化为这个简单的示例脚本:

#! /usr/bin/python

import hello
from threading import Thread

def myfunc():

        hello.HelloWorld().main()

t = Thread(target=myfunc)
t.start()

print '\nstill running ???'

问题是我试图找到解决gtk事件循环的阻塞行为的问题。这可能吗?正如您所看到的,即使我从一个单独的线程调用该类,事件循环也会阻止主脚本中的进一步进展(在gtk应用程序关闭之前不会打印“仍然运行???”)

1 个答案:

答案 0 :(得分:1)

您应该阅读threading best practice for pyGTK。 GTK应该在主线程中使用,但我仍然认为这很奇怪。

我尝试过以下代码:

#! /usr/bin/python

import gtk
from time import sleep
from threading import Thread


def myfunc():
    w = gtk.Window()
    l = gtk.Label()
    w.add(l)
    w.show_all()
    w.connect("destroy", lambda _: gtk.main_quit())
    gtk.main()

def myfunc2():
    sleep (3)

t = Thread(target=myfunc)
#t = Thread(target=myfunc2)
t.start()

print '\nstill running ???'

更糟糕的是,关闭应用程序后几乎总会打印出消息,但有时之前会出现。所以,这里有一种奇怪的行为。