Как использовать событие клавиатуры как часть условного оператора - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь создать программу, которая выводит событие нажатия клавиши в ответ на другое событие клавиатуры.Как заставить его использовать конкретное значение клавиши, нажатой в условном выражении?Коды, которые я пробую, похоже, полностью пропускают условное выражение.

Сначала пытался [if key == '1':],, потом устал от [if key == 1:].Также пробовал различные способы присвоения [ключа] переменной.Также попытался [print ('2')] вместо использования [pyautogui.typewrite('2')].Попытался поместить код как в on_press (клавиша), так и в on_release (клавиша).

`

    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()

`

Ожидается, что при каждом нажатии будет выдан '2'1 'на клавиатуре (в дополнение к выводу события нажатия клавиши и отпускания клавиши).Выход для нажатия «1» не работает.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Параметр key, который получает ваш on_press / on_release, является не символьной строкой, а объектом Key / KeyChar, поэтому его нельзя сравнивать напрямую со строкой.

Чтобы получить доступ к символу ввода с клавиатуры, используйте key.char вместо:

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

Посмотрите примеры кодов в документации pynput о том, как захватывать буквенные клавиши .

0 голосов
/ 05 июня 2019

Вы можете использовать библиотеку keyboard, чтобы обрабатывать / создавать ключевые события.

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

приведенный выше код выполняется до тех пор, пока 1 не будет получено в качестве нажатия клавиши.После нажатия клавиши будет напечатано 1 is pressed.

Вы можете в дальнейшем использовать другие функции этой библиотеки, чтобы обнаружить нажатие клавиши даже слишком.

...