与 tkinter 配合注意
44.13 与 tkinter 配合注意
不要在子线程里直接操作 tkinter 控件,可能导致崩溃或界面卡死。
子线程完成后再用 root.after(0, func) 在主线程更新界面。
💡 详见 tkinter 章节;打包 exe 时多线程程序一般可正常使用。
线程完成后更新标签
# ========================================
# 示例:子线程 + root.after 更新 GUI
# 说明:耗时操作放线程,UI 更新回主线程
# ========================================
import tkinter as tk
import threading
import time
root = tk.Tk()
label = tk.Label(root, text='等待中...', font=('', 14))
label.pack(pady=20)
def heavy_work():
time.sleep(2) # 模拟耗时
# 回到主线程更新界面
root.after(0, lambda: label.config(text='加载完成!'))
tk.Button(root, text='开始加载', command=lambda: threading.Thread(target=heavy_work, daemon=True).start()).pack()
root.mainloop()