【问题标题】:Hide the root window when a Toplevel window is opened and make it reappear when the Toplevel is destroyed当一个 Toplevel 窗口打开时隐藏根窗口,并在 Toplevel 被销毁时使其重新出现
【发布时间】:2014-07-21 13:23:42
【问题描述】:

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

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

这样做的原因是最终创建一个程序,该程序的主窗口充当菜单,当从它打开其他窗口时隐藏并在这些其他窗口退出时重新出现。

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()

任何帮助将不胜感激。

【问题讨论】:

    标签: tkinter


    【解决方案1】:

    您可以在第二个窗口的<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()
    

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 2017-07-13
      相关资源
      最近更新 更多