我用Tkinter写了一个gui类:
def start_gui():
def do_some_task():
dosometask
def do_some_task2():
dosometask2
ttk.Button(mainframe, text="task1", command=do_some_task).grid(column=1, row=3, sticky=W)
ttk.Button(mainframe, text="task2", command=do_some_task2).grid(column=2, row=3, sticky=W)
if __name__ == "__main__":
start_gui()
当我按下其中一个按钮时,GUI会冻结,直到任务完成。如何使用线程来防止这种情况,使两个按钮始终可用?
tkinter是单线程的。当一个函数正在运行时,它无法为事件提供服务,包括重绘窗口的请求等事件。
如果你的按钮调用的函数花费的时间超过几百毫秒左右,你需要在一个单独的线程或进程中运行它们,以便tkinter能够响应。