我想编写一个程序来计算键盘上按键的频率(例如每天)。我可以使用 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 个字母,并且不太确定现在该怎么做...有人有想法吗?
我正在尝试自己解决这个问题。为了回答错误想要什么,它希望您在传递给 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()
我希望这有帮助!
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')”
我使用 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