Помогите найти ошибку. Модуль Tkinter

Есть рабочий код, его функция состоит в том, что пользователь с помощью клавиш управляет шариком:

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root)
canvas.pack()

circle = canvas.create_oval((150, 100, 170, 120), fill='yellow')
vx = 0
vy = 0


def on_key_press(event):
    global vx, vy
    if event.keysym == 'Left':
        vx = -10
    elif event.keysym == 'Right':
        vx = 10
    elif event.keysym == 'Up':
        vy = -10
    elif event.keysym == 'Down':
        vy = 10


def on_key_release(event):
    global vx, vy
    if event.keysym in ('Left', 'Right'):
        vx = 0
    elif event.keysym in ('Up', 'Down'):
        vy = 0


root.bind('<KeyPress>', on_key_press)
root.bind('<KeyRelease>', on_key_release)


def game_loop():
    canvas.move(circle, vx, vy)
    root.after(50, game_loop)#Эту строку я изменяю


game_loop()

root.mainloop()

Но когда я изменяю root.after(50, game_loop) (Указано в коде) на две строчки, которые по логике должны работать:

time.sleep(0.5)
game_loop()

То программа запускает окно, рисует шарик и стопорится(Управлять нельзя), но не выдаёт ошибку. Что может быть не так?


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

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

Используя sleep(), вы ломаете цикл. after(), в отличии от sleep(), запускается в фоновом процессе.

→ Ссылка