即使我沒有給出gtkMainLoop.start()函數調用,下面的代碼在聲明og gtkLoopTHread本身後也會受到衝擊。 我想在後臺運行計時器並在該UI中執行一些操作,並在計時器達到0時銷燬UI。PyGtk:在單獨的線程中運行gtk.main()循環
代碼
def createCountDown(maxSec):
while maxSec > 0:
print maxSec;
maxSec = maxSec - 1;
gtk.main_quit();
return;
maxSec = 5;
gtkLoopThread = threading.Thread(group=None, target=gtk.main, name=None, args=(), kwargs={});
print "After gtkThread declaration"
myThread = threading.Thread(group=None, target=createCountDown, name=None, args=(maxSec), kwargs={});
gtkLoopThread.start();
myThread.start();
預期輸出:
After gtkThread declaration
5
4
3
2
1
當前的行爲: 線 'gtkThread聲明後' 因爲gtkLoopThread打印是沒有看到立即初始化後開始gtkLoopThread變量e
不,你不能在其他GTK +代碼的不同線程上運行'gtk.main()'。你需要在一個單獨的線程上運行你的其他東西。你也不能在單獨的線程上運行'gtk.main_quit()';您需要使用'glib.idle_add()'將一個函數排隊以在GTK +線程上運行。抱歉。 – andlabs
如果你只是想要一個計時器,你也可以使用'glib.timeout_add()'。 – elya5