Неожиданное поведение при использовании Keyboard.read_key()

#python #keyboard

#python #клавиатура

Вопрос:

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

 import keyboard


def dostuff():
    print("Mew")
    key = keyboard.read_key()
    print('I have detected', type(key))


keyboard.add_hotkey('a', lambda: dostuff())
keyboard.wait('esc')

  

Кто-нибудь может сказать, в чем проблема?

Ответ №1:

Если вы не хотите использовать модуль клавиатуры, вы можете использовать pynput, который делает то же самое,

установите pynput с помощью pip

 pip install pynput
  

вот код:-

 from pynput import keyboard

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

def on_release(key):
    print('{0} released'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener when esc key is pressed
        return False

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()
  

Комментарии:

1. я хочу определить нажатие клавиши, я не знаю заранее, какая клавиша будет нажата

2. Вы имеете в виду, что хотите сохранить его?

3. не отображая его на консоли?

4. пример объяснит лучше, пользователь нажимает горячую клавишу «a», скажем, a, затем нажимает цифровую клавишу, например, 5, а затем требуется клавиша 1 для доступа к значению с индексом 1. поэтому мне нужно нажать a, затем 1, чтобы получить доступ к значению с индексом 1 следующим образом

5. Для этого вы можете использовать операторы if else, просто замените функцию печати на if else, if key == key_release: , получить доступ