无论我按下多长时间,我都想在按下键“ s”时将变量“ shot_pressed”增加一个。但是结果是变量不断增加。我按下的时间越长,变量的值越大。以下是我的代码的一部分。

import keyboard

shot_pressed = 0

if keyboard.is_pressed('s'):
    shot_pressed += 1

最佳答案

首先看起来像您使用https://pypi.python.org/pypi/keyboard

其次,我假设您的代码不像您上面编写的那样,而是

import keyboard

shot_pressed = 0

while True:
    if keyboard.is_pressed('s'):
        shot_pressed += 1
        print("shot_pressed %d times"%shot_pressed)


如果是,则这是问题的核心:按下键时,is_pressed始终为True。因此,if条件将为True,而while将重复多次。

有两种处理方法。

1)使用相同的方法,但是检查这是否是is_pressed的第一个时刻,因此引入was_pressed变量:

import keyboard

shot_pressed = 0
was_pressed = False

while True:
    if keyboard.is_pressed('s'):
        if not was_pressed:
            shot_pressed += 1
            print("shot_pressed %d times"%shot_pressed)
            was_pressed = True
    else:
        was_pressed = False


2)更好地使用库。您可以设置一个钩子,这样在按下键时就会调用您的函数(一次按下一次)。因此,代码将如下所示:

import keyboard

shot_pressed = 0

def on_press_reaction(event):
    global shot_pressed
    if event.name == 's':
        shot_pressed += 1
        print("shot_pressed %d times"%shot_pressed)

keyboard.on_press(on_press_reaction)

while True:
    pass

07-24 09:45
查看更多