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'语句,我都应该得到相同的结果? –