Как я могу обнаружить ввод с клавиатуры для воспроизведения звука с питоном? - PullRequest
4 голосов
/ 13 марта 2019

Я делаю программу, которая будет воспроизводить звук, когда вы нажимаете клавишу (или просто печатаете) на клавиатуре.

Я только начал работать над этим, и я пытаюсь использовать pygame.key.get_pressed() для проверки ввода с клавиатуры. Я попал сюда с кодом:

from pygame import init, key

init()

spam = []

while True:
    spam = key.get_pressed()
    if True in spam:
        print('KEY PRESSED')
    elif False in spam:
        print('NONE')

Работает, проверяя, находится ли значение True в spam (spam - это имя списка, которое возвращает pygame). key.get_pressed возвращает список значений True/False для каждой клавиши, True при нажатии, False, если нет.

Проблема с этим кодом в том, что когда я его запускаю, он выводит только None. Это означает, что я не обнаруживаю ввод с клавиатуры.

Если кто-нибудь знает, как это исправить, или лучший способ сделать это, я был бы очень признателен!

Спасибо!

1 Ответ

1 голос
/ 13 марта 2019

pygame.key.get_pressed() получает состояния всех кнопок клавиатуры. Возвращает список.
Но обратите внимание, что значения, возвращаемые pygame.key.get_pressed(), обновляются только тогда, когда ключевым событием является получение событий из очереди на pygame.event.get(). Проще говоря, pygame.key.get_pressed() работает, только если есть цикл обработки событий.

Вы можете оценить конкретный ключ (например, пробел):

allKeys = pygame.key.get_pressed()
spam = allKeys[pygame.K_SPACE] 

Если вы хотите оценить, нажата ли какая-либо клавиша, вам нужно оценить, если any() значение в allKeys равно True:

allKeys = pygame.key.get_pressed()
anyKey = any([k for k in allKeys if k == True])

Другим решением было бы проверить, произошло ли событие KEYDOWN. Следующее ожидающее событие может быть получено с помощью pygame.event.get():

keyPressed = False
for event in pygame.event.get():
    if event.type == pygame.KEYDOWN: 
        keyPressed = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...