python - 为什么 pynput 不检测数字键盘按下?

标签 python keyboard detection

我在 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/

相关文章:

python - 更改多索引数据帧较低级别中的多个值

python - 从另一列的值创建新列

python - 如何检测python中的当前键盘语言

ios - 检测核心图上的触摸的方法

python - 使用 Python/Selenium 从 Angular 网站中选择复选框

python - 在多索引数据帧中使用 "forward-fill"有效地重新索引一个级别

react-native - Flatlist 在 TouchableWithoutFeedback 中不起作用

android - 键盘上方的下一个、上一个、完成按钮

ubuntu - 无法检测到 USB 驱动器。尝试了 lsusb、dconf-editor、磁盘实用程序、sudo blkid。

python - 在 Windows 上使用 Python 通过 USB 读取 iOS 设备生成和型号