Необходимо сделать анимированный квадрат tkinter

Приветствую и всех за одно с праздником. Решаю вот такую задачку: Исходно фигура имеет вид квадрата со стороной 400 пикселей. При запуске движения центры сторон начинают попиксельно сходиться к центру фигуры со скоростью 8 пик-селей/сек., превращая квадрат в крест X. Затем начинается обратное движение, и фигура возвращается к квадрату. Движение циклически повторяется. Запуск и остановка движения - радионабор. Не могу только допереть как можно это движение реализовать, надеюсь хотя бы на подсказку.

from tkinter import *
root = Tk()
root.title('main')
root.geometry('600x800')
 
c = Canvas(width=600, height=800, bg='white')
c.place(x=0, y=0)
 
n = 8
  
def move():
    s=c.coords(l1)
    s1=c.coords(l3)
    s2=c.coords(l5)
    s3=c.coords(l7)
    if s[3] < 200:
        s[3] = s[3]+n
        c.coords(l1, 200,100,300,s[3])
        c.coords(l2, 300,s[3],400,100)
        print(s)
        print(s[3])
        c.after(0)

    if s1[2] > 300:
        s1[2] = s1[2]-n
        c.coords(l3, 400,100,s1[2],200)
        c.coords(l4, s1[2],200,400,300)
        c.after(0)

    if s2[3] > 200:
        s2[3] = s2[3]-n
        c.coords(l5, 400,300,300,s2[3])
        c.coords(l6, 300,s2[3],200,300)
        c.after(0)

    if s3[2] < 300:
        s3[2] = s3[2]+n
        c.coords(l7, 200,300,s3[2],200)
        c.coords(l8, s3[2],200,200,100)
        c.after(0)
        
        #c.coords(l1, 200,100,300,150)
        #c.coords(l2, 300,150,400,100)
    
b1=Button(text='Запуск', command = move)
b1.pack()
 
l1 = c.create_line(200,100,300,100)
l2 = c.create_line(300,100,400,100)
l3 = c.create_line(400,100,400,200)
l4 = c.create_line(400,200,400,300)
l5 = c.create_line(400,300,300,300)
l6 = c.create_line(300,300,200,300)
l7 = c.create_line(200,300,200,200)
l8 = c.create_line(200,200,200,100)
 
lcenter = c.create_line(200,100,300,200)
#x=300,y=200 координаты центра.
root.mainloop()


Ответы (1 шт):

Автор решения: Сергей

Начните с того, что уберите рекуурсивный вызов move из функции. После этого виснуть перестанет, а начнет по каждому нажатию кнопки одна линия двигаться. Далее продолжайте отладку и исправление. Вам надо, чтобы двигались все 8 линий, и чтобы на кнопку были завязаны только начало и конец движения. Думаю, не так много осталось исправить.

→ Ссылка