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

Tkinter中关闭ChildWindow后后续代码未执行的问题求助

解决Tkinter子窗口关闭后后续代码不执行的问题

你遇到的问题核心是重复调用了mainloop()——Tkinter程序只需要一个主事件循环,你在子窗口里再次启动mainloop()会导致程序陷入新的循环,只有当这个子循环彻底退出(比如主窗口关闭),才会回到之前的代码执行print语句。

解决方案:用wait_window()替代子窗口的mainloop()

只需要移除子窗口的mainloop()调用,改用wait_window()方法,它会在主事件循环中等待子窗口关闭,之后自动继续执行后续代码。

修改后的完整代码:

from tkinter import *

class MainWindow():
    def __init__(self):
        self.root = Tk()
        
    def run(self):
        Button(self.root, text='click', command=self.open_child_window).pack()
        self.root.mainloop()

    def open_child_window(self):
        child = ChildWindow()
        # 等待子窗口关闭后再继续执行
        child.root.wait_window()
        print("why i'm not write?")  # 现在关闭子窗口后就会打印了

class ChildWindow():
    def __init__(self):
        self.root = Toplevel()
        # 可选:给子窗口加个关闭按钮,也可以直接点窗口叉号关闭
        Button(self.root, text='关闭子窗口', command=self.root.destroy).pack()

if __name__ == "__main__":
    app = MainWindow()
    app.run()

关键修改说明:

  1. 移除子窗口的mainloop():删除ChildWindow类中的run()方法,因为主窗口已经在运行mainloop(),不需要额外启动新的事件循环。
  2. 使用wait_window():在open_child_window()中调用child.root.wait_window(),这个方法会阻塞当前函数,直到子窗口被销毁(关闭),之后就会执行后面的print语句。

这样修改后,每次关闭子窗口,print语句都会立即执行,无需等待主窗口关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:15