You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter多窗口问题:点击按钮关闭主窗口且保留子窗口

解决Tkinter点击按钮关闭主窗口并保留新窗口的问题

问题根源

  1. 你的win2类错误地将主窗口master作为自身的父容器,导致实际修改的是主窗口的属性,而非创建独立的新窗口。
  2. 原代码用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:17:16