按下某个键时,只增加一个

时间:2017-11-08 16:06:13

标签: python keyboard

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

import keyboard

shot_pressed = 0

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

4 个答案:

答案 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