我是Python的新手,我正尝试使用键盘库检测何时按下f键。这是我要运行的代码
import keyboard
keyboard.on_press_key('f',here())
def here():
print('a')
但是,在将here()指定为回调时,在构建时出现名称未定义的错误
答案 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()