为什么我使用 .after() 延迟调用循环中的函数无法正常工作

问题描述 投票:0回答:1

为什么我使用 .after() 来延迟调用循环中的函数无法正常工作。 .after() 中的第一个循环延迟调用函数 show_letter() 。但在第一个循环之后,它只是调用该函数,没有任何延迟。

from tkinter import *
import random
import string

window = Tk()
# window.attributes('-fullscreen', True)


#
def show_letter():
    randomletter = random.choice(string.ascii_letters)

    print(randomletter)
    label.config(text=randomletter)
  


def delay_show():
    for i in range(200):
        window.after(2000, show_letter)


label = Label(window,
              text='',
              font=('arial', 40),
              )


label.place(relx=0.5, rely=.4, )

delay_show()

window.mainloop()
python tkinter delay
1个回答
0
投票

考虑这段代码:

def delay_show():
    for i in range(200):
        window.after(2000, show_letter)

它的作用是将第一次呼叫

show_letter
安排在 2 秒内。然后它安排两秒钟内的第二次呼叫。不是第一次调用后两秒,而是循环开始后两秒。然后第三次调用是在循环开始后两秒

换句话说,所有呼叫都计划在 2 秒内同时开始。

解决方法很简单:将循环增量乘以 2000 倍,这样第一次调用将在 2 秒内完成,下一次调用将在 4 秒内完成,下一次调用将在 6 秒内完成,依此类推。

def delay_show():
    for i in range(200):
        window.after(2000*i, show_letter)
© www.soinside.com 2019 - 2024. All rights reserved.