Создание цикла игровой анимации в Tkinter Python

господа программисты! Я создаю на Python с помощью Tkinter игру. Я бьюсь над проблемой бесконечнего вызова функции luch() и отображаения результата вызова функции на экране. Помогите пожалуйста. Вот код игры:

from tkinter import *
from tkinter import messagebox
from threading import Thread
from playsound import playsound 
import sys
import time
import threading
kill_boss=False
robot_health = 100


def attack():
    global robot_health,kill_boss
    if robot_health==0:
        kill_boss=True
    else:
        robot_health-=1
    

kill = False

fight = Tk()
fight['bg']='black'
fight.geometry("400x400")
fight.title('Битва')
w = 500
h=500
Canvas = Canvas(bg='black')
Canvas.pack()
def kot(a):
    messagebox.showinfo('Заголовок',a) 
global a1
global a2
global d1
global d2
a1= 15
a2=15
d1=25
d2=25
player = Canvas.create_rectangle(a1,a2,d1,d2,fill='red')
Button(fight,bg='red',comand=attack()).pack()
def down():
    global a1
    global a2
    global d1
    global d2
    Canvas.move(player,0,10)
    d2=+1
    c2=+1
def up():
    global a1
    global a2
    global d1
    global d2
    Canvas.move(player,0,-10)
    d2=-10
    c2-=10
def left():
    global a1
    global a2
    global d1
    global d2
    Canvas.move(player,-10,0)
    c1=-10
    d1-=10
def right():
    global a1
    global a2
    global d1
    global d2
    Canvas.move(player,10,0)
    c1=+10
    d1=+10
def luch(x1,x2,y1,y2):
    Canvas.create_rectangle(x1,x2,y1,y2,fill='white')
    '''if a1>x1 and a1 <y1 and a2>x2 and d2 < y2:
        kot("game_over")
        time.sleep(3)
        sys.exit()'''
    time.sleep(2)
    Canvas.create_rectangle(x1,x2,y1,y2,fill='black')
photo = PhotoImage(file = "1 враг.gif")
label = Label(image = photo).pack()

w.bind("<Up>", lambda event:up)
w.bind("<Left>", lambda event:left)
w.bind("<Right>", lambda event:right)
w.bind("<Down>", lambda event:down) 

fight.mainloop()

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

Автор решения: Uran54321

Можно с помощью создания отдельного процесса с этим циклом

→ Ссылка
Автор решения: Stanislav

Довольно стандартное решение для игр, год да есть тики. Запуск раз в секунду или как настроите.

from Tkinter import *
from random import randint
frm = Tk()
lab = Label(root)
lab.pack()

def tick():
   lab.config(text = randint(10,99)) # здесь можно вызывать функции
   frm.after(1000, tick)# запускает себя каждую секунду

# запускается один раз
tick()

frm.mainloop()
→ Ссылка