Tkinter程序点击Exit按钮后无法终止的问题咨询
问题排查与修复方案
核心问题分析
- 按钮绑定错误:Exit按钮的
command参数写的是lambda: terminate_prog,这只是引用了函数对象,没有实际调用函数。点击按钮后terminate_prog根本没执行,自然不会设置flag为True,也不会销毁窗口。 - 子线程非法操作GUI:
loop_func在子线程中直接调用mylabel.config(text="Loop"),tkinter要求所有GUI操作必须在主线程执行,子线程直接操作可能导致程序不稳定、界面卡顿。 - 子线程循环无休眠:
while True循环没有任何延迟,会持续占用大量CPU资源,即使后续flag被设置为True,也可能因为循环过于密集导致检测不及时。
修复后的完整代码
import threading import tkinter from tkinter import * import time flag = False def terminate_prog(): global win3, flag flag = True win3.destroy() def loop_func(): global flag while True: if flag: break # 通过after方法委托主线程更新UI win3.after(0, lambda: mylabel.config(text="Loop")) time.sleep(0.1) # 添加休眠降低CPU占用 win3 = tkinter.Tk() win3.geometry("700x500") mylabel = Label(win3, text="Text") mylabel.pack() # 设置为守护线程,主线程结束时自动退出 check_thread = threading.Thread(target=loop_func, daemon=True) check_thread.start() # 修正按钮的command绑定,直接关联函数 button_win3_end = Button(win3, text="Exit", command=terminate_prog) button_win3_end.place(x=40, y=400) win3.mainloop()
内容的提问来源于stack exchange,提问作者Nupur
相关产品推荐
相关产品推荐

