Прослушиватель Pynput не разрешает использование операторов if с буквенно-цифровыми символами - PullRequest
0 голосов
/ 31 января 2019

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

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

Ответы [ 2 ]

0 голосов
/ 31 января 2019
if str(key) == "'z'":

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

0 голосов
/ 31 января 2019

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

>>> type(keyboard._win32.KeyCode.from_char('z'))
<class 'pynput.keyboard._win32.KeyCode'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...