使用 pynput 进行键盘按下检测

Posted

技术标签:

【中文标题】使用 pynput 进行键盘按下检测【英文标题】:Keyboard Press Detection with pynput 【发布时间】:2021-04-29 14:04:30 【问题描述】:
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

请帮帮我:)

【问题讨论】:

【参考方案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。如果pressFalse,您只需忽略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) 

【讨论】:

我躺下睡觉。我会醒来并提出问题并关闭它。 @g0dst3r 什么意思,有什么不清楚的地方吗? 你能把它应用到所有键以及F1吗? @g0dst3r 是的,访问个人、更新答案更加容易。

以上是关于使用 pynput 进行键盘按下检测的主要内容,如果未能解决你的问题,请参考以下文章

使用 pynput 监听器创建键盘快捷键

Raspbian 在睡眠时检测键盘输入

python使用笔记:pynput库控制键盘鼠标

python实战===python控制键盘鼠标:pynput

如何通过pynput与日志记录实现键盘鼠标的监听行为?

Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘