特金特:自我毁灭()删除两个小部件

2024-09-28 19:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想有一个程序,点击一个按钮,应该打开另一个顶层窗口,并删除旧窗口。如果我使用自我毁灭(),它除了立即删除新窗口外,似乎还删除了旧窗口。我怎样才能既毁坏旧窗户又保持新窗户完好无损呢?你知道吗

import tkinter as tk

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

        self.goButton = tk.Button(master,text="Go!", command=self.openDir)
        self.goButton.grid(row=2)

    def openDir(self):
        self.newWindow = tk.Toplevel(self.master)
        self.app = DirView(self.newWindow)
        #self.master.destroy() This would destroy the new window as well as the old one

class DirView:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.label = tk.Label(master, text = "foo")
        self.label.grid()
        self.button = tk.Button(master, text="bar")
        self.button.grid()

if __name__ == '__main__':
    root = tk.Tk()
    app = DirSearch(root)
    root.mainloop()

Tags: textselfmasterinitdefasbuttonroot
2条回答

删除一个窗口也会导致其所有子窗口小部件被销毁。这就是tkinter的工作原理。因为顶级小部件(和所有小部件)是根窗口的后代,所以删除根窗口会删除所有小部件。你知道吗

根据经验,永远不要删除根窗口。当然可以,但是接下来需要创建一个新的根窗口并重新启动mainloop。你知道吗

@BryanOakley是对的。相反,你可以撤掉窗户。例如:

self.master.withdraw()

这样,用户将完全看不到根窗口,您可以随时使用以下命令将其恢复:

self.master.deiconify()

相关问题 更多 >