我试图在每次移动时为我的乌龟打印新坐标,无论是在控制台还是在画布上,同时擦除旧坐标。如何在每次按键后调用函数在屏幕上打印坐标?
这是我到目前为止:
def writer(x, y):
turtle1.write((x, y), align='center', font=FONT)
turtle1.undo()
wn.onkey(writer, "Up")
wn.onkey(writer, "Down")
wn.onkey(writer, "Left")
wn.onkey(writer, "Right")
你的代码只是一厢情愿的想法。你错过了你的进口和其他重要细节(例如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()