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

Tkinter程序点击Exit按钮需三次才终止,如何实现一键关闭?

解决Tkinter多窗口点击一次Exit按钮退出所有程序的问题

问题原因

你这段代码的问题在于每个窗口都创建了独立的Tk()实例,并且各自启动了mainloop()事件循环。三个mainloop()相互独立,调用每个窗口的quit()只能终止对应的那个循环,所以需要点击三次才能让所有循环结束,程序才会退出。

解决方案

Tkinter的正确用法是:整个程序只保留一个Tk()主窗口,其他弹出窗口用Toplevel()创建(它是依附于主窗口的子窗口)。这样整个程序只有一个事件循环,点击一次按钮就能终止所有窗口。

修改后的代码如下:

import tkinter

def win1_open(root):
    win1 = tkinter.Toplevel(root)
    win1.geometry('500x500')
    button_next = tkinter.Button(win1, text='Next', width=8, command=lambda: win2_open(root))
    button_next.place(x=100 * 2 + 80, y=100)

def win2_open(root):
    win2 = tkinter.Toplevel(root)
    win2.geometry('500x500')
    button_next = tkinter.Button(win2, text='Next', width=8, command=lambda: win3_open(root))
    button_next.place(x=100 * 2 + 80, y=100)

def win3_open(root):
    win3 = tkinter.Toplevel(root)
    win3.geometry('500x500')
    button_exit = tkinter.Button(win3, text='Exit', width=8, command=root.destroy)
    button_exit.place(x=100 * 2 + 80, y=100)

# 初始化唯一的主窗口
root = tkinter.Tk()
root.withdraw()  # 隐藏主窗口,只显示子窗口
win1_open(root)
root.mainloop()

关键修改点

  • 只创建一个Tk()实例作为主窗口,用withdraw()隐藏它(如果不需要显示主窗口的话)
  • 所有子窗口改用Toplevel(root)创建,绑定到主窗口
  • Exit按钮直接调用root.destroy(),一次性销毁主窗口和所有子窗口,终止整个事件循环

内容的提问来源于stack exchange,提问作者Nupur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:32