Прослушиватель Pynput не допускает использование операторов if с буквенно-цифровыми символами

Я пытаюсь создать клавиатуру пианино в Python, используя Jazz-Plugin для отправки MIDI-сообщений и Pynput слушатель для регистрации нажатий клавиш.

Моя проблема в том, что я хочу, чтобы самая низкая нота была на клавише Z. Кажется, я не могу найти способ заставить мое выражение if распознавать z или любые другие буквенно-цифровые клавиши при нажатии. Он работает со специальными клавишами, такими как LCtrl.

Я попытался найти ключ типа данных. Когда ключ является специальным символом, тип <enum 'Key'> но когда это буквенно-цифровой символ, это <class 'pynput.keyboard._win32.KeyCode'>

Это не сработало:

if key == pynput.keyboard._win32.KeyCode.z:

Замена его на 'z' или '' z '' или просто z также не работает.

Вот код:

def on_press(key):
    print(key, "pressed")
    if key == Key.ctrl_l:
        jazz.MidiOut(0x90, 30, 127)
    if key == "'z'":
        jazz.MidiOut(0x90, 60, 127)

def on_release(key):
    print(key, "released")
    if key == Key.esc:
        return False

with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

Когда нажата клавиша LCtrl, нота воспроизводится, как и ожидалось, и печатается Key.ctrl_l pressed, Когда z нажата, она печатает 'z' pressed но нота не играет. Для меня не имеет смысла, почему он не распознает нажатие клавиши.

Любая помощь будет оценена:)

3 ответа

Решение
if str(key) == "'z'":

это было так просто

Вы можете обернуть персонажа вокруг KeyCode

>>> type(keyboard._win32.KeyCode.from_char('z'))
<class 'pynput.keyboard._win32.KeyCode'>
      from pynput.keyboard import KeyCode

if key == KeyCode.from_char('A'):
    print('A')
Другие вопросы по тегам