Как сделать мою функцию циклической?

мне нужно, чтобы после нажатия на кнопку функция move срабатывала не один раз, а до тех пор, пока квадрат не превратится в крест, затем линии должны возвращаться на исходную и так по кругу. А также по нажатию на другую кнопку, которую я пока закомментил, цикл прекращался и всё останавливалось. Вот мой код:

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 stop():
  #здесь должен быть какой-то код
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)
        
    
b1=Button(text='Запуск', command = move)
b1.pack()

#b2=Button(text='Стоп', command = stop)
#b2.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)
 

#x=300,y=200 координаты центра.
root.mainloop()

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

Автор решения: Андрей Крузлик

Добавь в конце функции root.after(1000,move) 1000 - миллисекунды
только это будет бесконечный цикл. придумай по каким условия будет он останавливаться, для этого есть root.after_cancel(t) t- передается ID цикла.
его можно получить t = root.after(100, move).
вот думаю поможет тебе

import time
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 start():
    global l1, l2, l3, l4, l5, l6, l7, l8
    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)



def delete_line():
    c.after(10, c.delete, l1)
    c.after(10, c.delete, l2)
    c.after(10, c.delete, l3)
    c.after(10, c.delete, l4)
    c.after(10, c.delete, l5)
    c.after(10, c.delete, l6)
    c.after(10, c.delete, l7)
    c.after(10, c.delete, l8)


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)

    global t
    t = root.after(100, move)
    if not (s[3] < 200 and s1[2] > 300 and s2[3] > 200 and s3[2] < 300):
        delete_line()
        start()


def stop():
    root.after_cancel(t)


b1 = Button(text='Запуск', command=move)
b1.pack()

b2 = Button(text='Стоп', command=stop)
b2.pack()

start()

# x=300,y=200 координаты центра.
root.mainloop()
→ Ссылка