Time.sleep()在循环内无法正常工作

时间:2019-02-14 13:15:38

标签: python loops tkinter

这是一个非常简单的问题,已经在我的标题中解释过了,下面是代码:

def flash():
    import time
    for i in range(1,len(says)):
        label5.config(bg=says[i])
        time.sleep(1)
在这种情况下,

time.sleep完全不执行任何操作,只是将我的程序延迟了几秒钟,然后仅显示该函数的最终结果,并跳过了对我来说非常重要的整个过程。

1 个答案:

答案 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