繁体   English   中英

Tkinter.after() 冻结 window

[英]Tkinter .after() freezes window

我正在尝试使用 tkinter 制作一个脚本,该脚本使用.after() 一个接一个地显示一些元素(不是同时显示所有元素)。

我遇到的问题是所有元素在整体等待时间结束后同时显示(整体等待时间=每个元素的单个时间的总和)。

我检查了 web 上的许多示例,我想我使用的 .after() 方法是错误的,但我就是不知道为什么。

我希望以下代码更新 label 在每个循环后等待 0.5 秒。 尽管如此,我得到的是总等待 3 秒,之后 tkinter window 出现,显示列表的最后一个元素。

import tkinter as tk
import random

grid = [1, 2, 3, 4, 5, 6]

root = tk.Tk()

canvas = tk.Canvas(root, width=200, height=200)
canvas.pack()

def refresh():
    for i in range(len(grid)):
        text = grid[i]
        label.configure(text=text)

        root.after(500)

label = tk.Label(canvas, text='0', font='Courier 18')
label.place(relx=0.45, rely=0.4)

refresh()

root.mainloop()

提前致谢!

是的,这很正常,但是您必须在时间延迟后添加处理程序。 如果不这样做,计算机只会冻结程序,直到时间用完。

尝试这个:

root.after(500, handler)

它的作用是为处理程序创建一个 function,在 500 毫秒后,程序将调用该 function。

暂无
暂无

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

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