这是一个非常简单的问题,已经在我的标题中解释过了,下面是代码:
def flash():
import time
for i in range(1,len(says)):
label5.config(bg=says[i])
time.sleep(1)
在这种情况下, time.sleep
完全不执行任何操作,只是将我的程序延迟了几秒钟,然后仅显示该函数的最终结果,并跳过了对我来说非常重要的整个过程。>
答案 0 :(得分:1)
在Tkinter
中,您应该使用after
而不是sleep
来调度函数以便以后执行(以毫秒为单位)。就您而言,您可以尝试这样的事情。
def flash():
for i in range(1,len(says)):
label5.after(i*1000, lambda i=i: label5.config(bg=says[i]))
import tkinter as tk
says = ["white", "red", "green", "blue"]
root = tk.Tk()
label5 = tk.Button(root, text="Flashing label", command=flash)
label5.pack()
root.mainloop()
请注意,这不会延迟循环本身的执行,而只是计划在将来的不同时间更新标签。如果循环内还有更多代码需要与颜色变化同时发生,则也必须将其放入回调函数中,当然,该函数也可以是常规的def
函数lambda
中的。 (关于lambda i=i
:请参见here)