首頁  >  文章  >  後端開發  >  如何防止 Tkinter GUI 在等待執行緒完成時凍結?

如何防止 Tkinter GUI 在等待執行緒完成時凍結?

Patricia Arquette
Patricia Arquette原創
2024-11-03 05:22:03505瀏覽

How to Prevent Tkinter GUI from Freezing While Waiting for a Thread to Finish?

等待執行緒完成時凍結/掛起tkinter GUI

在此範例中,按下按鈕時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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn