为什么我使用 .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()
考虑这段代码:
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)