我用简单的例子创建了一个带有tKinter的Python GUI我有一个按钮,触发一个简单的循环,增加一个计数器。我已经成功地对计数器进行了线程化,因此我的GUI不会冻结,但是我遇到了让它停止计数的问题。这是我的代码:
# threading_example.py
import threading
from threading import Event
import time
from tkinter import Tk, Button
root = Tk()
class Control(object):
def __init__(self):
self.my_thread = None
self.stopThread = False
def just_wait(self):
while not self.stopThread:
for i in range(10000):
time.sleep(1)
print(i)
def button_callback(self):
self.my_thread = threading.Thread(target=self.just_wait)
self.my_thread.start()
def button_callbackStop(self):
self.stopThread = True
self.my_thread.join()
self.my_thread = None
control = Control()
button = Button(root, text='Run long thread.', command=control.button_callback)
button.pack()
button2 = Button(root, text='stop long thread.', command=control.button_callbackStop)
button2.pack()
root.mainloop()
如何安全地使计数器停止递增并正常关闭线程?
答案 0 :(得分:2)
所以你想要一个for循环和一个while循环并行运行?好吧,他们不能。正如你所拥有的那样,for循环正在运行,并且不会注意while循环条件。
您只需要制作一个循环。如果你希望你的线程在10000次循环后自动终止,你可以这样做:
def just_wait(self):
for i in range(10000):
if self.stopThread:
break # early termination
time.sleep(1)
print(i)
答案 1 :(得分:1)
您必须在self.stopThread
循环
for