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

关闭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()

关键说明

  1. 用Toplevel替代Tk:子窗口必须依附于主Tk实例,避免多个独立事件循环冲突。
  2. wait_window()的作用:让主窗口的事件循环暂停,直到子窗口关闭,确保子窗口关闭后才执行后续代码。
  3. 单一mainloop:整个程序只启动一次主窗口的mainloop(),所有窗口的事件都由它处理。

如果你的场景是通过主窗口按钮打开子窗口,只需将function_2(root)的调用替换成按钮的command回调即可,关闭子窗口后同样会立即执行print(1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:57:55