检测键盘输入

时间:2018-11-06 10:12:13

标签: python keyboard

我是Python的新手,我正尝试使用键盘库检测何时按下f键。这是我要运行的代码

import keyboard

keyboard.on_press_key('f',here())

def here():
    print('a')

但是,在将here()指定为回调时,在构建时出现名称未定义的错误

3 个答案:

答案 0 :(得分:1)

在调用here()时,尚未定义它,因此将here()的声明移到代码上方。

另外,由于应该将here用作回调,因此您需要将其传递给on_press_key作为函数引用。

import keyboard

def here():
    print('a')

keyboard.on_press_key('f', here)

答案 1 :(得分:1)

只需向上移动函数here()声明,就像这样:

import keyboard

def here():
    print('a')

keyboard.on_press_key('f', here())

否则here()尚未声明,因此您出错了。

  

NameError:全局名称“ ---”未定义Python知道其用途   某些名称(例如内置功能(如print)的名称)。   程序中定义了其他名称(例如变量)。如果   Python遇到一个无法识别的名称,您可能会   得到这个错误。导致此错误的一些常见原因包括:

     

忘记在另一个变量中使用变量之前给它赋值   语句拼写了内置函数的名称(例如,键入   “输入”而不是“输入”)

对于您在线的情况下的python解释器:

keyboard.on_press_key('f',here())

它不知道here()是什么,因为它还没有在内存中。

示例:

$ cat test.py 
dummy_call()

def dummy_call():
    print("Foo bar")
$ python test.py 
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    dummy_call()
NameError: name 'dummy_call' is not defined



$ cat test.py 
def dummy_call():
    print("Foo bar")

dummy_call()
$ python test.py 
Foo bar

答案 2 :(得分:0)

import keyboard
IsPressed = False

# once you press the button('f') the function happens once
# when you release the button('f') the loop resets

def here():
    print('a')

while True:
    if not keyboard.is_pressed('f'):
        IsPressed = False
    while not IsPressed:
        if keyboard.is_pressed('f'):
            here()
            IsPressed = True

# or if you want to detect every frame it loops then:

def here():
    print('a')

while True:
    if keyboard.is_pressed('f'):
        here()