python Tkinter,检查根目录是否已被销毁?
我正在使用Tkinter和线程编写一个应用程序 我遇到的问题是,在关闭主应用程序后,一些线程仍在运行,我需要一种方法来检查根窗口是否已被破坏,以避免出现python Tkinter,检查根目录是否已被销毁?,python,multithreading,python-2.7,tkinter,Python,Multithreading,Python 2.7,Tkinter,我正在使用Tkinter和线程编写一个应用程序 我遇到的问题是,在关闭主应用程序后,一些线程仍在运行,我需要一种方法来检查根窗口是否已被破坏,以避免出现tcl错误:无法调用“wm”命令 我知道的所有方法:wminfo\u exists()和state()一旦根目录被销毁,所有方法都会返回错误。如果使用类似的方法: import Tkinter root = Tkinter.Tk() root.bind('<space>', lambda e: root.quit()) # qui
tcl错误:无法调用“wm”命令
我知道的所有方法:wminfo\u exists()
和state()
一旦根目录被销毁,所有方法都会返回错误。如果使用类似的方法:
import Tkinter
root = Tkinter.Tk()
root.bind('<space>', lambda e: root.quit()) # quitting by pressing spacebar
root.mainloop()
导入Tkinter
root=Tkinter.Tk()
root.bind(“”,lambda e:root.quit())#按空格键退出
root.mainloop()
而不是:root.destroy()
,那么quit方法将杀死Tcl解释器,而不仅仅是从主循环中断并删除所有小部件。因此,一旦您调用了root.quit()
您就可以确定,您的root
已经完全死掉了
您建议的所有其他方法(如:wminfo\u exists()
)仅在至少存在一个有效的Tk
时可用
注意:
如果您正在使用多个主循环,您应该使用销毁方法来确保不会杀死您的mainmainloop,但我认为这不是您的情况。我将添加解决方法,以防任何人遇到相同的问题。我当时是在听他的建议。我截获windows的关闭事件,以设置标记根目录的标志,并在需要时检查该标志
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)
谢谢你的回答。我遇到的问题是,在root.quit()之后,我仍然有一些线程在运行,我需要让我的线程知道root
已经死了。现在,我必须解决拦截quit方法的问题,并设置一个全局变量,让我的线程知道root
已经死了。我想知道是否还有其他解决方案。root.winfo_exists()
(不带'm')?不管怎样,为什么不通过try/except捕捉到错误,当它发生时,你就杀死你的线程呢?我遵循了,他们提到,在执行过程中杀死线程是不好的做法。这就是为什么我希望找到一个解决方案,让我的程序的执行“和平地”结束。