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()
关键修改说明:
- 移除子窗口的
mainloop():删除ChildWindow类中的run()方法,因为主窗口已经在运行mainloop(),不需要额外启动新的事件循环。 - 使用
wait_window():在open_child_window()中调用child.root.wait_window(),这个方法会阻塞当前函数,直到子窗口被销毁(关闭),之后就会执行后面的print语句。
这样修改后,每次关闭子窗口,print语句都会立即执行,无需等待主窗口关闭。
内容的提问来源于stack exchange,提问作者chikibamboni
相关产品推荐
相关产品推荐

