В 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
: см. здесь )