tkinter无法隐藏嵌套的顶层窗口

2024-06-01 08:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在另一个类中创建了TopLevel类的实例,但无法“撤回()”子窗口 通过家长的电话

import tkinter as tk

class Table(tk.Toplevel):


    def __init__(self, master):

      tk.Toplevel.__init__(self,master)

      self.var_new_t=tk.Toplevel(self.master)  

      self.t2=Table_2(self.var_new_t)

      #Goal is to create a child window and immediately hide it.

      self.t2.hide_me()
      #self.t2.withdraw()  ##Tried a few differnt ways 


class Table_2(tk.Toplevel):

    def __init__(self, master):
            tk.Toplevel.__init__(self,master)
            self.master = master
            label = tk.Label(self.master, bg='green', text='Second Table')
            label.grid()

    def hide_me(self):

        self.master.withdraw()

root = tk.Tk()

n= Table(root)

tk.Button(root, text="Quit", command=root.destroy).pack()

root.mainloop()

我尝试了一些其他的变化,但没有成功


Tags: selfmasternewinitvardeftableroot
1条回答
网友
1楼 · 发布于 2024-06-01 08:32:16

您的代码正在创建两个窗口。考虑这个代码:

Table是顶级窗口,因为它继承自Toplevel。因此,此行创建了Table窗口:

  tk.Toplevel.__init__(self,master)

然后,在执行此操作时创建另一个窗口:

  self.var_new_t=tk.Toplevel(self.master) 

如果从Toplevel继承,通常不应在内部创建第二个Toplevel,除非明确打算创建两个窗口

您的代码需要如下所示:

class Table(tk.Toplevel):
    def __init__(self, master):
      tk.Toplevel.__init__(self,master)
      self.t2=Table_2(self)
      self.t2.hide_me()

class Table_2(tk.Toplevel):
    def __init__(self, master):
            tk.Toplevel.__init__(self,master)
            self.master = master
            label = tk.Label(self, bg='green', text='Second Table')
            label.grid()

    def hide_me(self):
        self.withdraw()

相关问题 更多 >