biz*_*izi 6 python multithreading tkinter python-2.7
我正在使用Tkinter和线程编写应用程序.
我得到的问题是,关闭主应用程序后,一些线程仍在运行,我需要一种方法来检查根窗口是否已被销毁以避免TclError: can't invoke "wm" command.
我知道的所有方法:一旦root被销毁wminfo_exists(),state()所有返回错误.
如果有人遇到同样的问题,我会为此添加我的解决方法.我是按照这里的建议.我拦截了窗口的关闭事件,设置了标志root已经死亡的标志,并在需要时检查该标志.
exitFlag = False
def thread_method():
global root, exitFlag
if not exitFlag:
// execute the code relate to root
def on_quit():
global exitFlag
exitFlag = True
root.destroy()
root.protocol("WM_DELETE_WINDOW", on_quit)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是这样的东西:
import Tkinter
root = Tkinter.Tk()
root.bind('<space>', lambda e: root.quit()) # quitting by pressing spacebar
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
而不是:root.destroy()那么 quit 方法将杀死 Tcl 解释器,而不仅仅是从主循环中退出并删除所有小部件。所以一旦你打电话,root.quit()你就可以确定,你root已经彻底死了!
您建议的所有其他方法(例如:)wminfo_exists()仅在至少Tk存在一种有效方法时才可用。
笔记:
如果您使用多个主循环,则应该使用 destroy 方法来确保您的主主循环不会被终止 - 但我认为这不是您的情况。