Проблема здесь не в порядке turtle.listen()
против turtle.onkey()
, это означает, что событие ключа не обрабатывается до завершения текущей операции. Вы можете улучшить это, сегментировав свое длинное движение turtle.goto(-200, 0)
на более мелкие движения, каждый из которых дает шанс вашему ключевому событию действовать. Вот грубый пример:
import turtle
in_motion = False
def stopMovingTurtle():
global in_motion
in_motion = False
def go_segmented(t, x, y):
global in_motion
in_motion = True
cx, cy = t.position()
sx = (x > cx) - (x < cx)
sy = (y > cy) - (y < cy)
while (cx != x or cy != y) and in_motion:
if cx != x:
cx += sx
if cy != y:
cy += sy
t.goto(cx, cy)
turtle.speed('slowest')
turtle.listen()
turtle.onkey(stopMovingTurtle, 'Return')
go_segmented(turtle, -200, 0)
go_segmented(turtle, 200, 0)
turtle.done()
Если (переход к окну и) хит возвращение, черепаха будет прекратить рисовать текущую строку.
'onkey' просто связывает функцию с ключом, поэтому вам нужно« слушать »после этого для ключей. switch 'onkey' и' listen' –
Хорошо, но это не помогает моему вопросу. –
Вы пробовали? Я дал идею переключения порядка 'turtle.listen()' и 'turtle.onkey()', потому что 'turtle.onkey' не« делает »ничего, кроме привязки функции к ключу, но' listen' делает. –