在此範例中,按下按鈕時GUI 凍結,因為主執行緒正在等待讓Thread(target = self.threaded_function) 建立的執行緒在繼續之前完成。為了保持 GUI 的回應能力,避免阻塞主執行緒非常重要。
這裡有一個替代實現,它使用佇列在執行緒和 GUI 之間傳遞資料:
queue = Queue() def threaded_function(): while True: if not queue.empty(): item = queue.get() print(item) # Do other processing here def helloCallback(): queue.put("asd") m = magic() B = tkinter.Button(top, text = "Hello", command = helloCallback) B.pack() top.mainloop() # Start the thread in the background t = threading.Thread(target = threaded_function) t.start()
在此實作後,GUI 執行緒繼續回應,而 threaded_function 在背景執行。隊列用於在兩個執行緒之間傳遞資料。當呼叫 helloCallback 函數時,它會向佇列新增一個項目,然後由 threaded_function 檢索並處理該項目。
以上是如何防止 Tkinter GUI 在等待執行緒完成時凍結?的詳細內容。更多資訊請關注PHP中文網其他相關文章!