Tkinter多窗口问题:点击按钮关闭主窗口且保留子窗口
解决Tkinter点击按钮关闭主窗口并保留新窗口的问题
问题根源
- 你的
win2类错误地将主窗口master作为自身的父容器,导致实际修改的是主窗口的属性,而非创建独立的新窗口。 - 原代码用
Toplevel创建新窗口,它依赖主窗口存在,主窗口关闭时会随之关闭;直接调用root.destroy()会终止原事件循环,但未启动新窗口的事件循环。
修改后的代码
from tkinter import * def initialization(): global root root = Tk() instance1 = Windows1(root) root.mainloop() class Windows1: def __init__(self, master): self.master = master self.master.title('main window') self.master.geometry('400x200') self.btn = Button(self.master, text='push here', command=self.function) self.btn.grid(row=2, column=0) def function(self): # 关闭主窗口 self.master.destroy() # 创建独立的新主窗口实例 new_root = Tk() # 将新窗口传入win2类进行初始化 instance2 = win2(new_root) # 启动新窗口的事件循环 new_root.mainloop() class win2: def __init__(self, master): self.master = master self.master.title('window2') self.master.geometry('400x600') if __name__ == '__main__': initialization()
关键修改点
- 关闭主窗口:在按钮点击事件中调用
self.master.destroy(),终止原主窗口及对应的事件循环。 - 创建独立窗口:用新的
Tk()实例构建第二个窗口,替代依赖主窗口的Toplevel,确保新窗口不随主窗口关闭。 - 启动新事件循环:为新窗口调用
mainloop(),维持其运行状态。
内容的提问来源于stack exchange,提问作者valy
相关产品推荐
相关产品推荐

