Tkinter从Toplevel摧毁根

时间:2014-08-05 20:36:08

标签: python oop user-interface tkinter

我正在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()

1 个答案:

答案 0 :(得分: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()