打开Toplevel窗口时隐藏根窗口,并在Toplevel被销毁时重新出现

时间:2014-07-21 13:23:43

标签: tkinter

如何在打开SECOND窗口时隐藏MAIN窗口,然后在SECOND窗口关闭时再次显示MAIN窗口?

我理解使用withdraw()和deiconify()但不确定如何在这种情况下应用它们。

这样做的原因是最终创建一个程序,MAIN窗口作为一个菜单,当其他窗口从中打开时隐藏,当其他窗口退出时重新出现。

from tkinter import *

class Main():

    def __init__(self, master):
        self.master = master
        self.title = "Main Window"

        self.button1 = Button(self.master, text="Click Me", command = self.Open)
        self.button1.grid(row=0, column=0, sticky=W)
        self.button2 = Button(self.master, text="Close", command = self.Close)
        self.button2.grid(row=1, column=0, sticky=W)


    def Open(self):
        second_window = Toplevel(self.master)
        window2 = Second(second_window)

    def Close(self):
        self.master.destroy()


class Second():

    def __init__(self, master):
        self.master = master
        self.title = "Second Window"



root = Tk()
main_window = Main(root)
root.mainloop()

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您可以在第二个窗口的<Destroy>上放置绑定,该绑定将调用将在主控上调用deiconify的函数。

如果SecondToplevel的子类,那么代码会更容易。如果您这样做,则可以在Second的定义中隐藏此代码。例如:

...
def Open(self):
    second_window = Second(self.master)
...

class Second(Toplevel):

    def __init__(self, master):
        Toplevel.__init__(self, master)
        self.master = master
        self.master.withdraw()
        self.bind("<Destroy>", self.on_destroy)

    def on_destroy(self, event):
        if event.widget == self:
            self.master.deiconify()