我有一个带有tkintergui的Python应用程序。在应用程序中,用户调用一个长期运行的后台进程(从Python的threading模块实现为Thread)。如果我在程序完成之前退出程序,就无法终止后台线程。如果我通过关闭根窗口上角的“X”退出应用程序,我的代码可以工作,但如果我从顶级菜单栏退出(即Python>;quit或Ctrl+Q),则代码不起作用。。因为大多数应用程序都使用后者,所以我真的希望能够实现这一点。在
现在,我用如下代码杀死后台线程:class BackgroundCallFrame(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.background_call = BackgroundCall()
self.background_call.start()
class BackgroundCall(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self._stop_req = threading.Event()
def run(self):
for i in range(1,100000):
if self._stop_req.is_set():
return
else:
# do stuff
def stop(self):
self._stop_req.set();
def main():
def kill_all_threads():
if child.background_