之间有什么区别
def after_func():
while True:
now_time.configure(text=datetime.datetime.now().strftime('%H: %M: %S'))
time.sleep(1)
root = Tk()
now_time = Label(text=datetime.datetime.now().strftime('%H: %M: %S'))
now_time.pack()
root.after(10, after_func)
root.mainloop()
和
def after_func():
now_time.configure(text=datetime.datetime.now().strftime('%H: %M: %S'))
root.after(1000, after_func)
root = Tk()
now_time = Label(text=datetime.datetime.now().strftime('%H: %M: %S'))
now_time.pack()
root.after(10, after_func)
root.mainloop()
为什么第一个发出不响应的消息,而第二个却产生一个每秒更新一次的时钟?我认为这两个代码应产生相同的结果。
关键的区别在于,使用的代码root.after
允许事件循环(mainloop
)处理每次迭代之间的事件。该while
循环不。Tkinter应用程序几乎所有事件都依赖于事件循环,包括操作系统或应用程序本身在检测到应显示内容的更改时要求重绘窗口的请求。
通过在循环内调用,您几乎可以获得与while
循环相同的结果root.update
,但是不建议这样做。另外,使用sleep
确实符合其名称的含义:整个程序进入睡眠状态一秒钟。在那一秒内,您的应用程序将变得完全无响应。
从技术上讲,带有的版本after
不是递归的。它所做的只是将自己放在队列中,以备后用。调用堆栈不会变得更大。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句