Обнаружение нажатия клавиатуры с помощью pynput

from pynput import keyboard 

def on_press(key): 
    print('Key %s pressed' % key) 

def on_release(key): 
    print('Key %s released' %key) 

with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: 
    listener.join()

если я продолжаю нажимать кнопку F1 и отпускать, он говорит

Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 pressed
Key Key.f1 released

если я продолжаю нажимать кнопку F1 и отпускать, я хочу, чтобы она работала, как показано ниже.

Key Key.f1 pressed
Key Key.f1 released

Помогите мне, пожалуйста :)


person g0dst3r    schedule 25.01.2021    source источник


Ответы (1)


pressed = False

def on_press(key): 
    global pressed
    if not pressed and key == keyboard.Key.f1: # only if key is not held
        print('Key %s pressed' % key) 
        pressed = True # key is held

def on_release(key):
    global pressed 
    if key == keyboard.Key.f1:
        print('Key %s released' %key) 
        pressed = False # key is released

Код довольно понятен, вы просто предоставляете логическое значение pressed, которое всякий раз, когда вы нажимаете клавишу F1, это True, а когда вы ее отпускаете, это False. Если press равно False, вы просто игнорируете сигнал on_press.

если вы хотите добиться этого с каждым ключом, вам придется хранить состояние каждого ключа в словаре (или как аналогичный объект).

pressed = {}

def on_press(key): 
    if key not in pressed: # Key was never pressed before
        pressed[key] = False
    
    if not pressed[key]: # Same logic
        pressed[key] = True
        print('Key %s pressed' % key) 

def on_release(key):  # Same logic
    pressed[key] = False
    print('Key %s released' %key) 
person Countour-Integral    schedule 25.01.2021
comment
Я лег спать. Я проснусь, задам вопросы и закрою его. - person g0dst3r; 25.01.2021
comment
@ g0dst3r Что ты имеешь в виду, что-то непонятно? - person Countour-Integral; 25.01.2021
comment
Можете ли вы применить его ко всем клавишам, а также к F1? - person g0dst3r; 25.01.2021
comment
@ g0dst3r g0dst3r Да, это даже проще, чем доступ к отдельным лицам, обновленный ответ. - person Countour-Integral; 25.01.2021