我正在尝试一个GUI应用程序,我在其中使用线程来创建并发执行的任务。这是代码:
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()
的问题:
isalive()
线程添加无限循环来打印mainer
,它仍然会说True
。 为什么不退出? print(kill)
函数中添加mainer
语句,我会得到两个结果之一:
maintext.set()
语句上方写入,则在退出窗口时,打印停止执行但线程仍未退出。很少,它确实如此,我假设它必须取决于执行退出函数时函数所在的行。我不知道这里发生了什么。任何帮助表示赞赏。
答案 0 :(得分:1)
如果你让线程成为一个守护进程,它会在主线程死掉时死掉,所以你根本不需要任何退出逻辑:
from tkinter import *
from threading import *
import time
def mainer():
while True:
maintext.set(value='bbb')
time.sleep(.1) # just so my CPU does not rail
root=Tk()
maintext=StringVar(value='aaa')
t = Thread(target=mainer)
t.daemon = True
t.start()
root.mainloop()