无论我按下多长时间,当按下“s”键时,我想将变量“shot_pressed”增加1。但结果是变量不断增加。我按下的时间越长,变量的值越大。以下是我的代码的一部分。
import keyboard
shot_pressed = 0
if keyboard.is_pressed('s'):
shot_pressed += 1
答案 0 :(得分:3)
首先看起来像是使用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时刻,因此inroduce 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
答案 1 :(得分:1)
我不知道 keyboard 模块,但代码的问题在于程序需要输入一次。你的程序应该等待键盘的下一个输入。尝试使用while
循环来获取用户的输入。
答案 2 :(得分:0)
我还没有使用过那个模块,但你可能想要在javascript中想要的东西。 keyboard.KEY_DOWN而不是is_pressed。
https://github.com/boppreh/keyboard#keyboard.KEY_DOWN
你可能也需要异步处理事情。
答案 3 :(得分:0)
import keyboard
import time
shot_pressed = 0
try:
while True:
if keyboard.is_pressed("S"):
shot_pressed += 1
time.sleep(0.1)
print(sh)
except Exception as er:
pass
或者可以使用读取密钥
try:
shot_pressed = 0
while True:
key.read_key()
if key.is_pressed("s"):
sh += 1
print(shot_pressed)
except Exception as er:
pass