python - 为什么 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()
它实际上只打印按下的键并且从不刹车(不接受数字输入)。
解决方案
您的代码正在测试 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
会有所帮助。不过,这不太可能,除非您使用的是非常受限的笔记本电脑键盘。
推荐阅读
- javascript - Thymeleaf 与谷歌图表
- python - 如何在数据框中获取一列中的键和另一列中的值,我的数据框如下所示:
- python - “numpy.ndarray”对象没有属性“backprop”
- python - 如何使用 seaborn 绘制单变量分布(仅对角线对角线)?
- hadoop - Hadoop 自定义计数器
- c# - 格式化数组时在“string.join()”中添加新行?
- node.js - Lighthouse Node CLI 返回错误的数字
- php - PHP - 逻辑 - if else / or die?
- c - 有人可以向我解释模字符如何输出前导零吗
- c# - 为什么 csproj 中的包引用后来在 PowerShell 模块中不可用?