使用 pynput 进行键盘按下检测

问题描述 投票:0回答:2
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

请帮助我:)

python keyboard pynput
2个回答
2
投票
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) 

0
投票

@Countour-Integral 的答案很好,但这里有另一个解决方案:等待,直到使用

keyboard
停止在函数内直接按下按键。这样,你就可以省略全局变量:

from pynput.keyboard import Key, Listener
import keyboard

def on_press(key):
    print('f1 pressed')
    if key == Key.f1:
        while True:
            if not keyboard.is_pressed('f1'):
                break

def on_release(key):
    if key == Key.f1:
        print('f1 released')

with Listener(on_press=on_press) as listener:
    listener.join()
© www.soinside.com 2019 - 2024. All rights reserved.