繁体   English   中英

update 和 update_idletasks 的问题

[英]Problems with update and update_idletasks

我已经学习 python 一个月了,遇到了我的第一堵砖墙。 我有一个大型艺术查看器 GUI 程序,有一次想在屏幕上放置一个图像,大约每 5 秒倒计时一次。 我想到了如下代码。问题是它使用了更新,而我所有的阅读都说更新不好(开始一个新的事件循环(?)),我应该使用 update_idletasks。 当我在下面的代码中用 update_idletasks 替换更新时,倒计时按钮在达到单个数字之前是不可见的,更新表面上工作正常。 但也是q绑定键调用子程序但没有效果

from tkinter import *
import sys
import time

root = Tk()

def q_key(event):
    sys.exit()

frame=Frame(root, padx=100, pady=100, bd=10, relief=FLAT)
frame.pack()
button=Button(frame,relief="flat",bg="grey",fg="white",font="-size 18",text="60")
button.pack()
root.bind("q",q_key)

for x in range(30, -1, -5) :
   button.configure(text=str(x))
   button.update()
   print(x)
   button.after(5000)

root.mainloop()

在这种情况下,您不需要update也不需要update_idletasks 您也不需要循环,因为 tkinter 已经在循环中运行: mainloop

相反,将循环体移动到 function,并通过after调用 function。 发生的情况是你做任何你想做的工作,然后安排你的 function 在延迟后再次运行。 由于您的 function 退出,tkinter 返回事件循环并能够正常处理事件。 当延迟结束时,tkinter 会调用您的 function,整个过程重新开始。

它看起来像这样:

def show(x):
    button.configure(text=x)
    if x > 0:
        button.after(5000, show, x-5)

show(30)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM