0
我正在嘗試使用線程來創建併發執行的任務的GUI應用程序。下面是代碼:用tkinter奇怪的退出線程的行爲
from tkinter import *
from threading import *
import time
kill = False
def mainer():
global kill
while not kill:
maintext.set(value='bbb')
def quitfunc():
global kill
kill = True
time.sleep(2)
root.destroy()
root=Tk()
maintext=StringVar(value='aaa')
Thread(target=mainer).start()
root.protocol("WM_DELETE_WINDOW", quitfunc)
root.mainloop()
問題:
- 當前標準的,在關閉根窗口,進程不會停止。它繼續運行。即使我爲
mainer
線程添加一個無限循環以打印isalive()
,它仍然會說True
。 爲什麼不退出? - 萬一我在
mainer
功能添加print(kill)
聲明,我得到兩個結果之一:- 如果上述
maintext.set()
聲明寫到,在退出窗口,打印停止得到執行,但螺紋仍不退出。非常非常罕見,它的確如此,我假設它必須取決於執行quit函數時函數的哪一行。 - 如果寫在該語句下面,在退出時,線程幾乎不可避免地退出。
- 如果上述
我不知道這裏發生了什麼。任何幫助表示讚賞。
你試圖加入'time.sleep( )'在你的循環中?也許,也許,這個線程太忙,無法向tkinter發送命令。 –
@ Jean-FrançoisFabre我想了解行爲背後的邏輯。爲什麼這是必要的?而實際的項目需要從USB串口讀取,不會'time.sleep()'導致延遲? –
@ Jean-FrançoisFabre在這種情況下,無論我在哪裏放置print(kill'語句,我都應該得到相同的結果? –