我正在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()
它实际上只打印按键并从不刹车(不接受数字输入)。
答案 0 :(得分:2)
您的代码正在测试值"1"
。这是您表示明显的赦免,如果您按下pynput
键,1
会返回什么。您要响应NumLock
键。
代替
if str(format(key)) == '1':
您可以对以下两个测试中的任何一个进行编码,这两个检查都将检查您所寻找的值:
if key == keyboard.Key.num_lock:
if str(format(key)) == "Key.num_lock":
但是... NumLock
键有两种。
一个是 Keyboard NumLock and Clear ,它同时具有USB代码(0x53)和Windows虚拟密钥代码(0x90)。 pynput
将响应按下此键。
另一种是 Keyboard Locking NumLock ,它在键盘级别起作用:它更改了键盘的行为方式,Windows对此一无所知。它具有USB代码(0x83),但没有Windows虚拟密钥代码。如果没有用于该键的虚拟键代码,则不会有Windows消息按该键,并且pynput
报告Windows消息。
因此,该行为取决于硬件,并且可能是您的计算机具有第二种NumLock
密钥。如果是这样,那么您对pynput
不能说的话将无济于事。但是,除非您使用的笔记本电脑键盘非常受限,否则这不太可能。
答案 1 :(得分:0)
快速浏览doc显示在某些平台上num lock键可能未定义。不幸的是,我没有Windows机器对此进行测试。
num_lock = <Key.f1: 0>
NumLock键。对于某些平台,可能未定义。
答案 2 :(得分:0)
您提供的代码似乎正在尝试检测数字键“ 1”,而不是“数字锁定”。
@BoarGules提供了完整的答案。只是需要澄清一下:
当使用pynput监视键盘时,如果尝试检测控制键,则应将其与适当的pynput.keyboard.Key对象进行比较。在检查num lock的情况下,您的代码应如下所示:
if key == keyboard.Key.num_lock:
print('exiting')
另一方面,如果您要查找字母数字键,请将其与pynput.keyboard.KeyCode进行比较:
if key == keyboard.KeyCode(char = '1'):
print('exiting')