Tkinter (python 2.7) |确定它的 tk 实例还是顶层实例
Tkinter (python 2.7) | determine whether its tk instance or toplevel instance
问题
root1 = tk.Tk()
root2 = tk.Toplevel()
如何根据root1
和root2
判断实例是tk还是toplevel?
我的情况(更多上下文)
我使用相同的 myCustomGUI
代码打开两个 Tkinter(实例)window。
root = tk.Tk()
mainGUI = myCustomGUI(root)
mainGUI.handler.setLevel(logging.INFO)
root2 = tk.Toplevel()
secondGUI = myCustomGUI(root2)
secondGUI.handler.setLevel(logging.ERROR)
在 myCustomGUI
class 中,我创建了一个 on_closing()
函数,该函数在用户关闭 window (root.protocol("WM_DELETE_WINDOW", self.on_closing)
) 时运行。
在上述函数中 on_closing()
我想要这样的东西:
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()
换句话说,当实例是Toplevel时,只销毁它,当实例是main时window,然后退出tkinter并退出整个程序。
补充说明(与问题无关)
打开两个界面相同的windows是为了在一个window中打印调试信息,在另一个window中打印重要信息,所以界面是一样的.
我创建 on_closing()
函数的目的是因为我必须从 logger
中删除处理程序。
最简单的解决方案是询问 tkinter class 小部件是什么——不是 python class 而是内部 tk class。对于根 window,它将是 Tk
,而对于顶层,它将是 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")
问题
root1 = tk.Tk()
root2 = tk.Toplevel()
如何根据root1
和root2
判断实例是tk还是toplevel?
我的情况(更多上下文)
我使用相同的 myCustomGUI
代码打开两个 Tkinter(实例)window。
root = tk.Tk()
mainGUI = myCustomGUI(root)
mainGUI.handler.setLevel(logging.INFO)
root2 = tk.Toplevel()
secondGUI = myCustomGUI(root2)
secondGUI.handler.setLevel(logging.ERROR)
在 myCustomGUI
class 中,我创建了一个 on_closing()
函数,该函数在用户关闭 window (root.protocol("WM_DELETE_WINDOW", self.on_closing)
) 时运行。
在上述函数中 on_closing()
我想要这样的东西:
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()
换句话说,当实例是Toplevel时,只销毁它,当实例是main时window,然后退出tkinter并退出整个程序。
补充说明(与问题无关)
打开两个界面相同的windows是为了在一个window中打印调试信息,在另一个window中打印重要信息,所以界面是一样的.
我创建 on_closing()
函数的目的是因为我必须从 logger
中删除处理程序。
最简单的解决方案是询问 tkinter class 小部件是什么——不是 python class 而是内部 tk class。对于根 window,它将是 Tk
,而对于顶层,它将是 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")