Python turtle: проверьте, не нажата ли клавиша - PullRequest
1 голос
/ 09 ноября 2019

Я хочу быть в состоянии определить, не нажата ли клавиша.

Я обнаружил функции turtle.onkey и turtle.onkeypress, однако они не работают для меня по двум причинам:

  1. они запускаются только при нажатии или отпускании клавиши.
  2. они вызывают функцию, когда вы их запускаете.

Я хочу логическое значение, равное True, если клавиша удерживается нажатой, или False, если клавиша не удерживается нажатой.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Вы не можете получить это напрямую, но вы можете использовать класс, который будет следить за событиями, касающимися ключей, которые вы хотите проверить:

import turtle

class WatchedKey:
    def __init__(self, key):
        self.key = key
        self.down = False
        turtle.onkeypress(self.press, key)
        turtle.onkeyrelease(self.release, key)

    def press(self):
        self.down = True

    def release(self):
        self.down = False

# You can now create the watched keys you want to be able to check:
a_key = WatchedKey('a')
b_key = WatchedKey('b')

# and you can check their state by looking at their 'down' attribute
a_currently_pressed = a_key.down

Небольшая демонстрация, состояние«a» и «b» будут печататься каждый раз, когда вы щелкаете в окне:

def print_state(x, y):
    print(a_key.down, b_key.down)

screen = turtle.Screen()
screen.onclick(print_state)

turtle.listen()
turtle.mainloop()
turtle.done()

Если вы хотите следить за состоянием связки клавиш, вы можете создать их наблюдатели следующим образом:

keys_to_watch = {'a', 'b', 'c', 'd', 'space']

watched_keys = {key: WatchedKey(key) for key in keys_to_watch}

и проверьте отдельные ключи с помощью

b_pressed = watched_keys['b'].down
0 голосов
/ 09 ноября 2019

Я нашел решение. Я просто настроил его для изменения переменной в зависимости от того, нажата ли клавиша

def wdown():
    global forward
    forward=True
def wup():
    global forward
    forward=False



screen.onkeypress(wdown,"w")
screen.onkey(wup, "w")
...