如何将键盘事件用作条件语句的一部分

时间:2019-06-05 11:48:57

标签: python pyautogui pynput

我正在尝试制作一个程序,该程序输出按键事件作为对另一个键盘事件的响应。如何使用条件语句中按下的键的特定值?我尝试的代码似乎完全跳过了条件语句。

最初尝试[if key == '1':],,然后对[if key == 1:]感到厌倦。还尝试了各种将[key]分配给变量的方法。还尝试了[print('2')]而不是使用[pyautogui.typewrite('2')]。试图将代码同时放在on_press(key)和on_release(key)中。

`

    import pyautogui
    from pynput.keyboard import Key, Listener

    def on_press(key):
        print('{0} pressed'.format(key))

    def on_release(key):
        print('{0} release'.format(key))
        k = format(key)
        if k == '1':       #THIS IS THE PART I CAN'T GET TO WORK
            pyautogui.typewrite('2', 0.5)
        if key == Key.esc:
    # Stop listener
            return False
    # Collect events until released
    with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

`

预期每当我在键盘上按“ 1”时输出“ 2”(除了keypress和keyrelease事件的输出)。按下“ 1”的输出无效。

2 个答案:

答案 0 :(得分:0)

您可以使用keyboard库来处理/创建关键事件。

while True:  
    try: 
        if keyboard.is_pressed('1'):   
            print('{} is pressed'.format(1))
            break
        else:
            pass
    except:
        break 

以上代码一直运行到收到1作为按键为止。按下键后,1 is pressed将被打印。

您还可以进一步使用此库的其他功能,以便甚至也可以检测到按键按下情况。

答案 1 :(得分:0)

您的key / on_press接收到的on_release参数不是字符串,而是Key / KeyChar对象,这就是为什么您不能直接将它与字符串进行比较。

要访问键盘输入字符,请改用key.char

def on_press(key): 
    print("pressed '{}'".format(key.char))

请查看pynput文档中有关capture non letter keys的示例代码。