【问题标题】:Turtle graphics onkeyrelease()海龟图形 onkeyrelease()
【发布时间】:2020-05-18 15:48:08
【问题描述】:

无法从 Python 的 turtle 模块实现 onkeyrelease()。请指教。 错误消息:'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)

【问题讨论】:

    标签: python turtle-graphics python-turtle


    【解决方案1】:

    根据错误消息,我的猜测是您正在运行 Python 2,而 onkeyrelease() 是 Python 3 方法。即便如此:

    从 Python 2 过渡到 Python 3 的产物,onkey()onkeyrelease()同义词。你可能想要的是onkeypress()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 下工作。

    【讨论】:

    • 感谢您的回复。我试图完成的是在按下一个键的同时移动一个物体,就像你的脚放在油门上一样。我放弃。相反,让鼠标成为控制器。使用mouseX = wn.getcanvas().winfo_pointerx() 向左或向右移动由mouseX 确定的乌龟。最大化海龟 Screen() 有助于确定鼠标位置。 wn 是 Screen() 的名称。
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2014-03-18
    • 1970-01-01
    • 2012-05-17
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多