首页 > 解决方案 > 为什么 pynput 不检测数字键盘按下?

问题描述

我在 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()

它实际上只打印按下的键并且从不刹车(不接受数字输入)。

标签: pythonkeyboarddetection

解决方案


您的代码正在测试 value "1"。这是,请原谅你说的很明显,pynput如果你按下1键会返回什么。您想响应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会有所帮助。不过,这不太可能,除非您使用的是非常受限的笔记本电脑键盘。


推荐阅读