Как сделать мою функцию циклической?
мне нужно, чтобы после нажатия на кнопку функция 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()