Прослушиватель 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 ответа
Вы можете обернуть персонажа вокруг 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')