pynput自定义keyEvent类中event.key与Key对象不匹配问题
问题分析与解决
根本原因
问题出在keyEvent类的构造函数中:
def __init__(self, key, callback, onPress, onRelease): self.key = key, # 这里多了一个逗号! # ... 其他代码
末尾的逗号会将key包装成单元素元组,比如原本传入的keyboard.Key.enter会变成(<Key.enter: <65293>>,)。而_onKeyPress中传入的key是原始的Key对象,元组和单个Key对象永远不可能相等,所以所有事件的匹配判断都失败了。
修复方法
去掉self.key = key,末尾的逗号,改为直接赋值:
self.key = key
修改后,event.key会存储原始的Key对象,和_onKeyPress传入的key类型一致,就能正确匹配触发fire方法。
验证说明
从你的输出日志也能佐证这个问题:
- 第一行显示传入的key是
Key.enter(单个对象) - 后续日志里的
event.key都是带括号的元组格式,比如(<Key.enter: <65293>>,)
两者类型和值都不匹配,自然无法触发事件。
内容的提问来源于stack exchange,提问作者AwesomeCronk
相关产品推荐
相关产品推荐

