在此程式碼中,按下按鈕時 GUI 凍結。這個問題源自於在執行緒上使用 join(),這會阻塞 GUI 的 mainloop(),直到執行緒完成執行。
Tkinter 是一個單執行緒GUI函式庫,表示所有GUI操作必須在主執行緒上執行。當使用 join() 啟動執行緒時,它會阻止主執行緒執行更多程式碼,直到執行緒完成。這可能會導致 GUI 變得無響應,甚至完全掛起。
為了避免凍結問題,應修改程式碼以使用非阻塞方法來執行執行緒。一種方法是使用 tkinter 小部件的 after() 方法來安排一個函數在指定的延遲後執行。
<code class="python">m = magic() def hello_callback(): m.add_item("asd") m.start_converting("test") # Schedule the function to be executed after 50 milliseconds top.after(50, hello_callback)</code>
在此程式碼中,hello_callback 函數被安排執行50 毫秒後。這允許 GUI 在線程在後台執行時繼續響應用戶輸入。
透過使用非阻塞方法來執行線程,GUI 保持回應並且凍結問題已解決。
以上是當我在線程上使用 join() 時,為什麼我的 tkinter GUI 凍結了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!