2 回答

TA贡献1770条经验 获得超3个赞
'flag' 不是全局变量,因此当它在 canc() 中设置为 False 时,loop() 中的 'flag' 局部变量的值不会改变,因此循环不会停止
还需要使用 root.update() 来更新 GUI
补救措施:
from tkinter import*
import threading
import time
root = Tk()
def loop():
global flag
flag = True
for i in range(10):
if flag == True:
root.update()
time.sleep(0.5)
print("Looping")
def canc():
global flag
flag = False
btn = Button(root, text="Start Loop", command=loop).pack()
cncl = Button(root, text="Cancel", command=canc).pack()
root.mainloop()

TA贡献1803条经验 获得超6个赞
我找到了解决这个问题的方法:
我在一个线程中开始了我耗时的工作,并检查了我的线程是否仍在while 循环中运行,并且在其中,我确实更新了我的Tkinter根目录。
这是我的代码:
def start_axis(input):
print(input)
time.sleep(5)
def axis():
t = threading.Thread(target=start_axis, args=("x"))
t.start()
while t.is_alive():
try:
root.update()
except:
pass
args 部分很重要,因此线程不会立即调用该函数
添加回答
举报