从Toplevel销毁根窗口
我正在用tkinter写一个多窗口的图形界面程序。下面的代码是我主要部分的布局。第一个窗口运行得很好,但当我通过调用self.next_win
进入第二个窗口时,情况就有点奇怪了。
主要的问题是,当我想关闭整个图形界面时,我希望每个窗口都有一个退出按钮,按下后可以关闭整个程序(也就是调用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 个回答
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()