首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >update和update_idletasks的问题

update和update_idletasks的问题
EN

Stack Overflow用户
提问于 2020-05-01 00:35:40
回答 1查看 70关注 0票数 0

我已经学习python一个月了,遇到了我的第一道砖墙。我有一个大的艺术查看器GUI程序,并在某一点上想把一个图像在屏幕上与倒计时计数器-大约每5秒。我想到了下面这样的代码,问题是这使用了update,而我所有的阅读都表明update是错误的(启动了一个新的事件循环(?))我应该使用update_idletasks。当我在下面的代码中将update替换为update_idletasks时,倒计时按钮直到达到一位数才可见,update表面上工作得很好。而且Q限制键也调用子例程,但没有效果

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2020-05-01 00:48:53

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

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

它看起来像这样:

代码语言:javascript
复制
def show(x):
    button.configure(text=x)
    if x > 0:
        button.after(5000, show, x-5)

show(30)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61528355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档