Python tkinter:self.master.destroy()删除两个小部件

Python tkinter:self.master.destroy()删除两个小部件,python,tkinter,Python,Tkinter,我想有一个程序,点击一个按钮,应该打开另一个顶级窗口和删除旧窗口。如果我使用self.master.destroy(),除了立即删除新窗口外,它似乎还会删除旧窗口。如何在保持新窗口完好无损的同时销毁旧窗口 将tkinter作为tk导入 类目录搜索: 定义初始(自我,主): self.master=master self.goButton=tk.Button(master,text=“Go!”,command=self.openDir) self.goButton.grid(行=2) def op

我想有一个程序,点击一个按钮,应该打开另一个顶级窗口和删除旧窗口。如果我使用self.master.destroy(),除了立即删除新窗口外,它似乎还会删除旧窗口。如何在保持新窗口完好无损的同时销毁旧窗口

将tkinter作为tk导入
类目录搜索:
定义初始(自我,主):
self.master=master
self.goButton=tk.Button(master,text=“Go!”,command=self.openDir)
self.goButton.grid(行=2)
def openDir(自):
self.newWindow=tk.Toplevel(self.master)
self.app=DirView(self.newWindow)
#self.master.destroy()这将破坏新窗口和旧窗口
类目录视图:
定义初始(自我,主):
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()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=tk.tk()
app=DirSearch(根目录)
root.mainloop()

删除窗口也会导致其所有子窗口小部件被销毁。这就是tkinter的工作原理。由于顶级小部件(和所有小部件)是根窗口的后代,因此删除根窗口将删除所有小部件


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

@BryanOakley是对的。相反,您可以撤消窗口。例如:

self.master.withdraw()
这样,用户将完全看不到根窗口,您可以随时使用以下工具将其恢复:

self.master.deiconify()