无论我按下多长时间,我都想在按下键“ 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