Pynput:计算按键次数

问题描述 投票:0回答:3

我想编写一个程序来计算键盘上按键的频率(例如每天)。我可以使用 Pynput 来识别某个按键,但我在计数部分遇到困难。这是我到目前为止得到的:

from pynput.keyboard import Key, Listener
i = 0
def on_press(key, pressed):
    print('{0} pressed'.format(
        key))
    if pressed({0}):
        i = i + 1
        
def on_release(key):
    if key == Key.esc: 
        # Stop listener
        return False

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

执行时出现以下错误:

TypeError: on_press() missing 1 required positional argument: 'pressed'

我也不知道如何分隔所有 26 个字母,并且不太确定现在该怎么做...有人有想法吗?

python pynput
3个回答
1
投票

我正在尝试自己解决这个问题。为了回答错误想要什么,它希望您在传递给 on_press 的参数中定义参数“pressed”。

例如。

    def on_press(key, pressed=0):
        print('{0} pressed'.format(
            key))
        if pressed({0}):
            i = i + 1

该块上方的 i = 0 超出了 on_press 块的范围,因此无法使用。

我遇到的问题是,我可以让它递归地计算击键次数,但是它不会停止,只需一次击键即可达到最大递归深度!

如果有任何进展我会再次回复。也祝你好运!

---我明白了! --- 以下另一个 StackOverflow 帖子的链接引导我走向正确的方向: 在 Python 中使用 pynput 检查特定密钥

这是我的代码。它将显示键入的字符并增加键入的按键数:

    from pynput.keyboard import Key, Listener

    strokes = 0


    def on_press(key):
        if key == Key.esc:
            return False
        print('{0} pressed'.format(
            key))
        global strokes
        strokes += 1
        print(strokes)


    with Listener(
            on_press=on_press) as listener:
        listener.join()

我希望这有帮助!


0
投票
from pynput import keyboard

c=0
with keyboard.Events() as events:
    for event in events:
        if event.key == keyboard.Key.esc:
            break
        elif (str(event)) == "Press(key='1')":
                c+=1
                print(c)        

您可以使用“Press(key='1')”内的任何键,例如“Press(key='2')”、“Press(key='q')”


0
投票

我使用 pynput 编写了一个新脚本,该脚本使用字典来计算按键次数。该脚本将一直运行,直到您按“esc”键为止。

from pynput.keyboard import Key
from pynput import keyboard

d = {}

def on_press(key):
    if hasattr(key,'char'):

        global d
        d[key] = d.get(key,0) + 1

        print(f'{key} pressed')
        print(d)

    elif key == Key.esc: 
        listener.stop()
    
listener = keyboard.Listener(on_press=on_press)
listener.start()

while True:
    pass
© www.soinside.com 2019 - 2024. All rights reserved.