关闭Tkinter窗口后如何继续执行程序?
解决Tkinter多窗口关闭后代码不执行的问题
问题根源
Tkinter设计要求一个程序只能有一个主tk.Tk()实例和一个主事件循环(mainloop())。你创建两个tk.Tk()实例会导致事件循环混乱,阻塞逻辑不符合预期。
正确解决方案
用tk.Toplevel()创建子窗口替代第二个tk.Tk(),并通过wait_window()方法等待子窗口关闭,这样子窗口关闭后就能立即执行后续代码。
修改后的代码示例
import tkinter as tk def function_2(parent): # 创建子窗口 root2 = tk.Toplevel(parent) # 这里添加子窗口的组件(比如按钮) root2.protocol("WM_DELETE_WINDOW", lambda: root2.destroy()) parent.wait_window(root2) # 等待子窗口关闭后再继续执行 print(1) # 子窗口关闭后立即执行这里的代码 def function_1(): # 创建主窗口 root = tk.Tk() # 如果需要通过按钮触发子窗口,可替换成以下代码 # btn = tk.Button(root, text="打开子窗口", command=lambda: function_2(root)) # btn.pack() function_2(root) # 直接打开子窗口 root.mainloop() # 启动主事件循环 function_1()
关键说明
- 用Toplevel替代Tk:子窗口必须依附于主Tk实例,避免多个独立事件循环冲突。
- wait_window()的作用:让主窗口的事件循环暂停,直到子窗口关闭,确保子窗口关闭后才执行后续代码。
- 单一mainloop:整个程序只启动一次主窗口的
mainloop(),所有窗口的事件都由它处理。
如果你的场景是通过主窗口按钮打开子窗口,只需将function_2(root)的调用替换成按钮的command回调即可,关闭子窗口后同样会立即执行print(1)。
内容的提问来源于stack exchange,提问作者Agent00111
相关产品推荐
相关产品推荐

