while循环和after之后重复调用函数之间的区别

丹克斯博士

之间有什么区别

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()

为什么第一个发出不响应的消息,而第二个却产生一个每秒更新一次的时钟?我认为这两个代码应产生相同的结果。

布莱恩·奥克利(Bryan Oakley)

关键的区别在于,使用的代码root.after允许事件循环(mainloop)处理每次迭代之间的事件。while循环不。Tkinter应用程序几乎所有事件都依赖于事件循环,包括操作系统或应用程序本身在检测到应显示内容的更改时要求重绘窗口的请求。

通过在循环内调用几乎可以获得与while循环相同的结果root.update,但是不建议这样做。另外,使用sleep确实符合其名称的含义:整个程序进入睡眠状态一秒钟。在那一秒内,您的应用程序将变得完全无响应。

从技术上讲,带有的版本after不是递归的。它所做的只是将自己放在队列中,以备后用。调用堆栈不会变得更大。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

setTimeout()重复调用函数,而忽略间隔

来自分类Dev

如何避免重复调用JavaScript函数

来自分类Dev

javascript函数的重复调用造成冲突

来自分类Dev

setTimeout()重复调用函数,而忽略间隔

来自分类Dev

angularjs $超时和重复调用

来自分类Dev

ISR和函数调用之间的区别?

来自分类Dev

系统调用和库函数之间的区别

来自分类Dev

如何在不返回所打印内容的值且没有for循环的情况下重复调用打印函数?

来自分类Dev

有史以来最奇怪的函数重复调用

来自分类Dev

避免重复调用函数,除非其工作完成

来自分类Dev

linux内核模块中的Write函数被重复调用

来自分类Dev

Tkinter Listobox Selection 重复调用函数/自动刷新

来自分类Dev

如何在时间间隔后重复调用函数

来自分类Dev

为什么我的类构造函数被重复调用?

来自分类Dev

C ++:重复调用system()

来自分类Dev

避免重复调用funcall

来自分类Dev

重复调用相同的AsyncTask

来自分类Dev

javascript中调用对象和函数之间的区别

来自分类Dev

反复调用函数:Haskell

来自分类Dev

PowerShell反复调用函数

来自分类Dev

C ++和while之间的区别?

来自分类Dev

if()和ifelse()函数之间的区别

来自分类Dev

if()和ifelse()函数之间的区别

来自分类Dev

:和=与javascript函数之间的区别

来自分类Dev

使用Python模拟在重复调用中模拟出一个函数

来自分类Dev

重复调用函数本身,直到使用promise-Angularjs满足条件为止

来自分类Dev

重复调用同一函数时,无法使jQuery回调正常工作

来自分类Dev

java.lang.OutOfMemoryError:重复调用函数时发生Java堆空间错误

来自分类Dev

在通过AJAX重复调用某个函数时,如何使警报不再显示多次?

Related 相关文章

热门标签

归档