2012-11-28 25 views
1

可能重複:
Simple pygtk and threads example pleasepython腳本需要很長的時間和窗口似乎停止了

我有這個 「問題」 與我的Python腳本。 我使用pygtk(帶有一個文本字段)製作窗口,然後我的腳本執行數據庫查詢並準備將數據存儲到txt文件中。一切都很好,但只有一件事我正面臨 - 這個功能運行約。 2-4分鐘,在此期間,我的程序窗口沒有「響應」,因此它看起來像程序窗口凍結了(但腳本正在運行,窗口在完成後再次「活動」)。

我該如何對待這種行爲?我希望我的窗戶能夠隨時響應。例如:有一個文本框「正在工作...」。

+0

我絕不是在PyGTK的專家,但你可能需要移動處理邏輯出的PyGTK的事件循環線程,因此後者可以做的事情,而你」重新做你的。 – NPE

回答

1

您需要在應用程序中使用線程。任何時候你有一個長時間運行的進程,你需要把這個工作放到一個單獨的線程中,並將進度更新發送到主線程。我已經回答了一個類似的問題,然後才能找到工作example here。下面提供了一個較短的虛擬樣例。

例如

import gtk, gobject, urllib, time, threading 

def run(): 
    for i in range(50): 
     gobject.idle_add(button.set_label, '%s/50 complete' % i) 
     time.sleep(0.1) 

def clicked(button): 
    threading.Thread(target=run).start() 

gtk.gdk.threads_init() 
win = gtk.Window() 
button = gtk.Button(label="Start") 
button.connect('clicked', clicked) 
win.add(button) 
win.show_all() 
gtk.main() 
相關問題