1

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

#! /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 应用程序关闭之前不会打印)

4

1 回答 1

1

您应该阅读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 ???'

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

于 2012-09-13T08:29:16.690 回答