Tkinter mainloop()关闭窗口后随机不退出问题咨询
你遇到的这个偶发mainloop卡死问题属于Python 3.9版本tkinter模块的已知偶发bug,触发原因是点击窗口X按钮时,销毁信号偶发没有被事件循环正常捕获,导致mainloop一直处于阻塞状态,不会执行后续代码。
修复方案
通过绑定窗口关闭事件,手动终止事件循环、销毁资源并兜底退出进程,可100%避免该问题:
from tkinter import * import sys root = Tk() # 自定义窗口关闭逻辑 def on_close(): root.quit() # 强制终止mainloop事件循环 root.destroy() # 销毁所有tkinter资源 sys.exit(0) # 兜底直接终止整个Python进程,完全避免挂死 # 绑定窗口X按钮的关闭事件到自定义逻辑 root.protocol("WM_DELETE_WINDOW", on_close) # 注意原示例的Label参数缺少text关键字声明,否则会触发参数错误 Label(root, text='hi').pack() mainloop() print('exited')
其他可选方案
如果你的运行环境允许升级Python版本,该问题在Python 3.10及后续版本中已经被官方修复,升级后无需额外加自定义关闭逻辑也不会出现偶发卡死的情况。
内容的提问来源于stack exchange,提问作者Billy Cao
相关产品推荐
相关产品推荐

