Слушатель 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, но нота не воспроизводится. Для меня не имеет смысла, почему он не распознает нажатие клавиши.

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


person N. Hooley    schedule 31.01.2019    source источник
comment
'z' = символ 122?   -  person Mika72    schedule 31.01.2019


Ответы (2)


if str(key) == "'z'":

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

person N. Hooley    schedule 31.01.2019

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

>>> type(keyboard._win32.KeyCode.from_char('z'))
<class 'pynput.keyboard._win32.KeyCode'>
person cmaureir    schedule 31.01.2019