我尝试用 python 制作简单的按键计数器,但发现了一个问题。当我按住某个键一段时间时,它开始快速计数,因为我按住了该键。
from pynput.keyboard import Listener
n = 0
def on_press(key):
global n
n += 1
def on_release(key):
pass
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
所以我做了一把锁,当我按住钥匙时,它无法计数。
from pynput.keyboard import Listener
pressed = False
n = 0
def on_press(key):
global n, pressed
if pressed == False:
n += 1
pressed = True
def on_release(key):
global pressed
pressed = False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
但是现在当我开始打字或玩游戏时,它不会计算每次按下的次数,因为我有时同时按住 2 个键,所以 1 个键不计算在内。
我尝试在按住按键 0.5 秒后锁定,因此它会计算我打字时的每次按键,但当我按住多个按键超过 0.5 秒时仍然存在问题(当我按住多个按键超过 0.5 秒时,只算了1)。
有没有办法让它对每次按下(无论时间长短)只计数一次,并且可以同时按住多个键?
您的问题可以通过跟踪数组中当前按下的按钮来解决。
from pynput.keyboard import Key, Listener
keys_currently_pressed = []
n = 0
def on_press(key):
global n
if key not in keys_currently_pressed:
keys_currently_pressed.append(key)
n += 1
print(key, 'pressed')
def on_release(key):
global n
if key in keys_currently_pressed:
keys_currently_pressed.remove(key)
print(key, 'released')
if key == Key.esc:
print("You pressed", n, "keys")
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()