【问题标题】:Keyboard Press Detection with pynput使用 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

请帮帮我:)

【问题讨论】:

    标签: python keyboard pynput


    【解决方案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) 
    

    【讨论】:

    • 我躺下睡觉。我会醒来并提出问题并关闭它。
    • @g0dst3r 什么意思,有什么不清楚的地方吗?
    • 你能把它应用到所有键以及F1吗?
    • @g0dst3r 是的,访问个人、更新答案更加容易。
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2021-04-19
    • 2018-10-24
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多