python 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

我正在使用Tkinter和线程编写一个应用程序

我遇到的问题是,在关闭主应用程序后,一些线程仍在运行,我需要一种方法来检查根窗口是否已被破坏,以避免出现
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捕捉到错误,当它发生时,你就杀死你的线程呢?我遵循了,他们提到,在执行过程中杀死线程是不好的做法。这就是为什么我希望找到一个解决方案,让我的程序的执行“和平地”结束。