0

无法onkeyrelease()从 Python 的 turtle 模块实现。请指教。错误信息:'module' object has no attribute 'onkeyrelease'turtle.onkeyrelease(stay, 'd')尝试更换wn.onkeyrelease(stay, 'd')无济于事。

import turtle

speed = 0

wn = turtle.Screen()
wn.tracer(0)

box = turtle.Turtle()
box.shape('square')
box.penup()

def move_right():
    global speed
    speed = 2

def stay():
    global speed
    speed = 0

turtle.listen()
turtle.onkey(move_right, 'd')
turtle.onkey(stay, 's')
turtle.onkeyrelease(stay, 'd')

while True:
    wn.update()
    box.setx(box.xcor() + speed)
4

1 回答 1

0

根据错误消息,我的猜测是您正在运行 Python 2 并且onkeyrelease()是 Python 3 方法。即使是这样:

从 Python 2 过渡到 Python 3的产物onkey()onkeyrelease()同义词。您可能想要的是onkeypress()and onkeyrelease()。即使是这样:

也就是说,在按键按下和释放时尝试做不同的事情是否会起作用是不确定的。在我的系统上,按下和释放都是由按键触发的。由于操作系统的原因,您的结果可能会有所不同。

您最好使用两个键,'d' 开始动作,'s' 停止它:

from turtle import Screen, Turtle, mainloop

speed = 0

def move_faster():
    global speed
    speed = 2

def stay():
    global speed
    speed = 0

def move():
    box.forward(speed)
    screen.update()
    screen.ontimer(move)

screen = Screen()
screen.tracer(False)

box = Turtle()
box.shape('square')
box.penup()

screen.onkey(stay, 's')
screen.onkey(move_faster, 'd')
screen.listen()

move()

mainloop()

这段代码应该在 Python 2 和 Python 3 下工作。

于 2020-05-18T17:34:28.950 回答