tkinter中如何暂停指定函数而不冻结整个窗口?
问题根源
你当前调用的是仅传入时间参数的after()方法,该方法会直接阻塞Tkinter的主事件循环,导致窗口无法响应交互、也无法完成界面重绘,自然就会出现冻结的问题。
after()方法的标准用法是同时传入延迟时长和回调函数,Tkinter主循环会在计时结束后自动执行回调,全程不会阻塞界面运行。
正确实现
def setTimer(mins=25): timer.config(text="In Progress") # 延迟指定时长后执行状态更新逻辑,不阻塞主循环 window.after(mins * 60 * 1000, update_timer_status) def update_timer_status(): timer.config(text="Timer done!")
如果需要给回调函数传递自定义参数,直接追加在回调函数名之后即可:
def setTimer(mins=25, done_tip="Timer done!"): timer.config(text="In Progress") window.after(mins * 60 * 1000, update_timer_status, done_tip) def update_timer_status(content): timer.config(text=content)
只要回调函数内部没有长时间阻塞的操作,运行全程窗口都不会出现冻结,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Daniel Portas-Levy
相关产品推荐
相关产品推荐

