Pynput侦听器不允许if语句使用字母数字字符

时间:2019-01-31 09:32:22

标签: python keyboard keyboard-events pynput

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

我的问题是我希望最低音符在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,但是该音符不播放。对我来说,为什么它不能识别按键是没有道理的。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

您可以在KeyCode

周围包裹一个字符
>>> type(keyboard._win32.KeyCode.from_char('z'))
<class 'pynput.keyboard._win32.KeyCode'>

答案 1 :(得分:0)

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

就这么简单