【问题标题】:Tkinter destroy root from ToplevelTkinter 从顶层销毁根
【发布时间】:2014-09-28 15:33:12
【问题描述】:

我正在 tkinter 中编写一个多窗口 GUI 程序。下面显示的代码是我的代码主要部分的布局。第一个窗口工作正常,但是当我通过调用self.next_win 到达第二个窗口时,有些事情开始变得非常有趣。

主要问题是当我要销毁 GUI 时:我希望每个窗口中都有一个退出按钮,按下该按钮会关闭整个 GUI (root.destroy)。从第一个窗口这很好,我调用self.quit 方法;但是当我到达第二个窗口时它不起作用。我知道这是因为第二个窗口中的master 是一个Toplevel 小部件,但我不知道如何解决这个问题。我不知道如何从第二个窗口调用root.destroy

我该如何解决这个问题? SecondWin.quit 方法中的一行,或者更好的代码结构使解决方案变得微不足道(请记住,我是初学者,所以必须解释琐事)?谢谢。

class FirstWin:
    def __init__(self, master):
        self.master = master
        ...

    ...

    def next_win(self):
        self.master.withdraw()
        root2 = Toplevel()
        SecondWin(root2)

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

class SecondWin:
    def __init__(self, master):
        self.master = master
        ...

    ...

    def quit(self):
        self.master.destroy() # What goes in here?

...

def main():
    root = Tk()
    GUI = FirstWin(root)
    root.mainloop()

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python oop user-interface tkinter


    【解决方案1】:

    您需要做的就是告诉 SecondWin 根窗口是什么,它可以销毁它。

    ...
        root2 = Toplevel()
        # tell the second window what the master is,
        # and also tell it to be a child of FirstWin.
        SecondWin(self.master, root2)
    ...
    
    class SecondWin():
        def __init__(self, root, master):
            # root is the root window, master is the parent of this window
            self.root = root
            self.master = master
            <other initialization code here>
    
        def quit(self):
            self.root.destroy()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多