为什么用`frame.quit`关闭一个tkinter子窗口退出我的应用程序?

时间:2018-02-15 21:34:45

标签: python tkinter

我有一个带有两个窗口的tkinter应用程序:启动时创建的MainWindow和点击按钮后打开的ChildWindow

如果用户按下按钮,ChildWindow应自行关闭。但是,当我尝试调用frame.quit时,它会终止整个应用程序。

import tkinter as tk

class ChildWindow:
    def __init__(self, master):
        self.top = tk.Toplevel(master)
        self.frame = tk.Frame(self.top)
        self.frame.pack()
        # BUG: Clicking "Close" will fully exit application
        self.close_button = tk.Button(self.frame, text="Close", command=self.frame.quit)
        self.close_button.pack()

class MainWindow:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.about_button = tk.Button(self.frame, text="Open child window", command=self._open_child_window)
        self.about_button.pack()
        self.frame.pack()

    def _open_child_window(self):
        self.about_window = ChildWindow(self.master)

root = tk.Tk()
lf = MainWindow(root)
root.mainloop()

截图:

MainWindow ChildWindow

为什么frame.quit退出我的申请?如何在不退出的情况下关闭子窗口?

1 个答案:

答案 0 :(得分:3)

这是因为delete导致quit退出。没有事件循环运行,没有任何东西可以使主窗口保持活动状态。

如果要关闭子窗口,请调用mainloop方法。

destroy