【发布时间】:2019-04-09 16:17:16
【问题描述】:
我遇到了一个问题,我的 Tkinter UI 在运行 for loop 时完全卡住且无法交互。我的示例代码在循环中打印“循环”,并且 UI 上有一个“取消”按钮应该停止循环,但由于我无法单击“取消”按钮,因此无法停止循环.所以我的问题是如何让我的tkinter UI 在循环运行时可用。下面是示例代码:
from tkinter import*
import time
root = Tk()
i=10
flag = False
def loop():
flag = True
for i in range(100):
if flag == True:
time.sleep(0.5)
print("Looping")
def canc():
flag = False
btn = Button(root, text="Start Loop", command=loop).pack()
cncl = Button(root, text="Cancel", command=canc).pack()
root.mainloop()
我尝试为loop 函数创建一个新线程,但这不起作用。
更新的代码,UI 是响应式的,但按下取消时没有任何反应:
from tkinter import*
import threading
import time
root = Tk()
i=10
flag = False
def loop():
flag = True
for i in range(10):
if flag == True:
time.sleep(0.5)
print("Looping")
def run():
threading.Thread(target=loop).start()
def canc():
flag = False
btn = Button(root, text="Start Loop", command=run).pack()
cncl = Button(root, text="Cancel", command=canc).pack()
root.mainloop()
【问题讨论】:
-
添加线程不起作用怎么办?您是如何尝试的,预期的结果是什么?发生了什么?
-
我把代码弄乱了,是的,这行得通。现在看来,每次循环运行时我都需要更新“标志”以使其停止。
标签: python multithreading for-loop tkinter