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
相关产品推荐
相关产品推荐

