Черепаха графика onkeyrelease()

Невозможно реализовать 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)

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.

Другие вопросы по тегам