Остановить Python turtle нажатием клавиши

#python #python-turtle

#питон #python-turtle #python

Вопрос:

Я пытаюсь заставить черепаху прекратить движение вперед, когда я нажимаю клавишу escape. Когда я нажимаю escape, ничего не происходит! Кто-нибудь может сказать мне, почему? Мы были бы очень признательны за решение.

 import turtle
screen = turtle.Screen()

running = True

def stop():
        running = False
        print(running)

while running:
        turtle.forward(1)
        screen.onkey(stop, "Esc")
        screen.listen()
  

Ответ №1:

Я вижу несколько проблем с вашим кодом. Основной из них — это отсутствующий global оператор в stop() . К вторичным относятся: смешивание функций черепахи и объектных API; использование имени ключа ‘Esc’ вместо ‘Escape’; помещение onkey() и listen() в цикл; и потенциальная блокировка событий с помощью вашего while цикла.

Я считаю, что этот код должен делать то, что вы хотите:

 from turtle import Screen, Turtle

running = True

def stop():
    global running

    running = False

def run():
    if running:
        turtle.forward(1)
        screen.ontimer(run)

screen = Screen()
screen.onkey(stop, 'Escape')
screen.listen()

turtle = Turtle()

run()

screen.mainloop()