Time.sleep () не работает должным образом внутри цикла - PullRequest
0 голосов
/ 14 февраля 2019

Это довольно простая проблема, уже объясненная в моем заголовке, вот код:

def flash():
    import time
    for i in range(1,len(says)):
        label5.config(bg=says[i])
        time.sleep(1)

time.sleep, в данном случае абсолютно ничего не делает, но задерживает мою программу на пару секунд, а затемтолько показывает конечный продукт функции и пропускает весь процесс, что очень важно для меня.

1 Ответ

0 голосов
/ 14 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...