Ваш код - просто желаемое за действительное.Вам не хватает импорта и других важных данных (например, декларации turtle1
и FONT
).Вы предполагаете, что onkey()
передает координаты своим обработчикам событий (это не так).Для того, чтобы делать то, что вы хотите, требуется гораздо больше настроек.Я бы порекомендовал двух черепах, один из которых реагирует на события клавиатуры, заметно двигаясь по экрану, а второй, который сидит в начале координат, записывает координаты первой черепахи:
from turtle import Screen, Turtle
FONT_SIZE = 18
FONT = ('Arial', FONT_SIZE, 'normal')
def move_up():
wn.onkey(None, 'Up') # disable handler inside handler
turtle1.sety(turtle1.ycor() + 5)
writer()
wn.onkey(move_up, 'Up')
def move_down():
wn.onkey(None, 'Down')
turtle1.sety(turtle1.ycor() -5)
writer()
wn.onkey(move_down, 'Down')
def move_left():
wn.onkey(None, 'Left')
turtle1.setx(turtle1.xcor() - 5)
writer()
wn.onkey(move_left, 'Left')
def move_right():
wn.onkey(None, 'Right')
turtle1.setx(turtle1.xcor() + 5)
writer()
wn.onkey(move_right, 'Right')
def writer():
turtle2.undo()
turtle2.write(turtle1.position(), align='center', font=FONT)
turtle1 = Turtle('circle')
turtle1.penup()
turtle2 = Turtle(visible=False)
turtle2.penup()
turtle2.sety(-FONT_SIZE / 2)
turtle2.write(turtle1.position(), align='center', font=FONT)
wn = Screen()
wn.onkey(move_up, 'Up')
wn.onkey(move_down, 'Down')
wn.onkey(move_left, 'Left')
wn.onkey(move_right, 'Right')
wn.listen()
wn.mainloop()