Tkinter(python 2.7)|确定其tk实例还是顶级实例
问题: 如何从root1和root2确定实例是tk还是toplevel 我的处境需要更多的背景 我使用相同的myCustomGUI代码打开两个Tkinter实例窗口 在myCustomGUI类中,我创建了一个on_closing函数,该函数在用户关闭root.protocolWM_DELETE_窗口self.on_closing时运行 在上述函数中,我希望有如下内容:Tkinter(python 2.7)|确定其tk实例还是顶级实例,python,python-2.7,tkinter,tk,toplevel,Python,Python 2.7,Tkinter,Tk,Toplevel,问题: 如何从root1和root2确定实例是tk还是toplevel 我的处境需要更多的背景 我使用相同的myCustomGUI代码打开两个Tkinter实例窗口 在myCustomGUI类中,我创建了一个on_closing函数,该函数在用户关闭root.protocolWM_DELETE_窗口self.on_closing时运行 在上述函数中,我希望有如下内容: def on_closing(self): if self.root is tk: self.root.
def on_closing(self):
if self.root is tk:
self.root.quit()
exit() # exit the whole program OR run some custom exit function
else: # meaning self.root is Toplevel
pass
self.root.destroy()
换句话说,当实例为顶级时,只销毁它;当实例为主窗口时,退出tkinter并退出整个程序
与问题无关的补充说明
打开两个界面相同的窗口的目的是在一个窗口中打印调试信息,在另一个窗口中打印重要信息,因此界面是相同的
我创建on_closing函数的目的是因为我必须从记录器中删除处理程序。最简单的解决方案是询问tkinter小部件是什么类——不是python类,而是内部tk类。对于根窗口,它将是Tk,对于toplevel,它将是toplevel,除非您显式地更改它,这是非常不寻常的
import tkinter as tk
class MyTop(tk.Toplevel):
pass
root = tk.Tk()
top = tk.Toplevel(root)
mytop = MyTop(root)
assert(root.winfo_class() == "Tk")
assert(top.winfo_class() == "Toplevel")
assert(mytop.winfo_class() == "Toplevel")
def on_closing(self):
if self.root is tk:
self.root.quit()
exit() # exit the whole program OR run some custom exit function
else: # meaning self.root is Toplevel
pass
self.root.destroy()
import tkinter as tk
class MyTop(tk.Toplevel):
pass
root = tk.Tk()
top = tk.Toplevel(root)
mytop = MyTop(root)
assert(root.winfo_class() == "Tk")
assert(top.winfo_class() == "Toplevel")
assert(mytop.winfo_class() == "Toplevel")