2 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個贊
'flag' 不是全局變量,因此當(dāng)它在 canc() 中設(shè)置為 False 時,loop() 中的 'flag' 局部變量的值不會改變,因此循環(huán)不會停止
還需要使用 root.update() 來更新 GUI
補(bǔ)救措施:
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貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個贊
我找到了解決這個問題的方法:
我在一個線程中開始了我耗時的工作,并檢查了我的線程是否仍在while 循環(huán)中運(yùn)行,并且在其中,我確實(shí)更新了我的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 部分很重要,因此線程不會立即調(diào)用該函數(shù)
添加回答
舉報