Tkinter中调用after()方法时前置组件是否影响执行效果?
Tkinter
after() 方法调用主体规则 核心结论
after() 方法对调用对象没有强制绑定要求:
- 所有Tkinter的可视化控件、主窗口(
Tk()实例)、顶层弹窗(Toplevel()实例)都可以作为after()的调用主体,哪怕这个控件和你要执行的定时逻辑完全无关,定时任务也能正常运行。 - 你代码里的
window.after(1000,update)完全可以替换成任意控件调用的写法,以下几种写法运行效果完全一致,不会因为调用主体是时间标签就只刷新时间部分:
window.after(1000, update) time_label.after(1000, update) day_label.after(1000, update) date_label.after(1000, update)
原理说明
Tkinter所有控件共享同一个主事件循环,
after()的本质是向全局事件队列注册一个延迟执行的任务,和你通过哪个控件对象触发注册操作没有关联。只要所属的主事件循环还在正常运行(主窗口未销毁、mainloop()未退出),注册的定时任务就会按设定的延迟触发。
实际使用注意事项
唯一会导致定时任务失效的场景:如果调用after()的控件已经被destroy()方法销毁,通过这个控件注册的未触发的定时任务会直接失效。
所以日常开发中更推荐直接用主窗口对象调用after(),避免动态删除控件时导致定时任务意外中断。
内容的提问来源于stack exchange,提问作者peter
相关产品推荐
相关产品推荐

