2

我正在尝试使用 Jazz-Plugin 在 Python 中创建一个钢琴键盘,用于发送 MIDI 消息,并使用 Pynput 侦听器来注册击键。

我的问题是我希望最低音符在 Z 键上。我似乎无法找到一种方法来让我的 if 语句在按下时识别 z 或任何其他字母数字键。它确实适用于特殊键,例如 LCtrl。

我试图找出数据类型键是什么。当 key 是一个特殊字符时,类型是,<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但不会播放音符。对我来说,为什么它不能识别击键是没有意义的。

任何帮助,将不胜感激 :)

4

3 回答 3

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

就这么简单

于 2019-01-31T09:48:24.810 回答
0
from pynput.keyboard import KeyCode

if key == KeyCode.from_char('A'):
    print('A')
于 2021-11-24T05:10:42.520 回答
0

您可以将一个字符包裹在一个KeyCode

>>> type(keyboard._win32.KeyCode.from_char('z'))
<class 'pynput.keyboard._win32.KeyCode'>
于 2019-01-31T09:38:29.173 回答