我在 Windows 7 上使用 python 3.7。
有没有办法检测pynput模块中的数字(例如:“1”)按键?
我尝试了许多其他模块,但除了 tkinter 之外我什么也没得到 它需要一个窗口,但我不想要那个。
from pynput import keyboard
def on_press(key):
print(key)
if str(format(key)) == 'Key.1':
print('Exiting...')
return False
with keyboard.Listener(on_press = on_press) as listener:
listener.join()
它实际上只打印按下的键并且从不刹车(不接受数字输入)。
最佳答案
您的代码正在测试值“1”
。恕我直言,如果您按 1
键,pynput
将返回什么,请原谅。您想要响应 NumLock
键。
而不是
if str(format(key)) == '1':
您可以编写以下任一测试代码,这两个测试都会检查您要查找的值:
if key == keyboard.Key.num_lock:
if str(format(key)) == "Key.num_lock":
但是...有两种NumLock
键。
其中一个是键盘 NumLock 和 Clear,它具有 USB 代码 (0x53) 和 Windows 虚拟键代码 (0x90)。 pynput
将响应按下此键。
另一种是键盘锁定 NumLock,它在键盘级别工作:它改变键盘的行为方式,而 Windows 听不到它。它有一个 USB 代码 (0x83),但没有 Windows 虚拟键代码。如果该键没有虚拟键代码,则按下该键时不会出现 Windows 消息,并且 pynput
会报告 Windows 消息。
因此,该行为取决于硬件,并且您的机器可能具有第二种 NumLock
键。如果确实如此,那么您对 pynput
说什么都无济于事。不过,除非您使用的是非常有限的笔记本电脑键盘,否则这种情况不太可能发生。
关于python - 为什么 pynput 不检测数字键盘按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610099/