Использование time.sleep()
приводит к зависанию окна и цикла while
.Чтобы использовать time.sleep
в tkinter, мы используем after(ms)
(мс-миллисекунды) в функциях, чтобы графический интерфейс не зависал.
Хотя делает то же самое, поэтому мы используем функцию after(ms, callback, args)
.
Вот пример того, чего вы пытаетесь достичь.Прямоугольник меняет свой цвет каждые 1000 мс (1 сек) с красного на синий - с синего на красный и так далее.Также в вашем коде вы создавали новый холст и прямоугольник каждые 4 секунды.Я определил один холст и один прямоугольник вне функции task()
и дал прямоугольнику тег (tag='rect')
для ссылки, через которую можно редактировать цвет этого прямоугольника без создания ненужных элементов.Я надеюсь, что это помогло вам.
Пример:
from tkinter import *
root = Tk()
canvas = Canvas(root)
canvas.pack()
canvas.create_rectangle(0,0,100,100,fill='red', tag='rect')
def task():
l = root.after(1000, task)
if int(l.split('#')[1]) % 2 == 0:
canvas.itemconfig('rect', fill='blue')
else:
canvas.itemconfig('rect', fill='red')
task()
root.mainloop()