如何将Python keyboard模块的按键编码转换为字符?
解决Python keyboard模块键码转按键名称/字符的问题
要解决键码到可读按键名称的转换问题,可利用keyboard模块内置的键名转换方法,同时预生成映射字典提升检测效率,具体实现如下:
核心方案
- 预生成键码→按键名称的映射表,提前过滤无效键码,避免循环中重复执行转换逻辑
- 使用
keyboard.key_name()完成键码到标准名称的转换,支持普通字符键与特殊功能键(如win、shift) - 优化检测循环,只遍历有效键码并添加延时降低CPU占用
修改后的代码
import keyboard import time # 预生成键码到按键名称的映射字典,过滤无效键码 key_code_to_name = {} for key_code in range(150): try: key_name = keyboard.key_name(key_code) # 可选:简化特殊键名称(如将左右win统一显示为"win") if "windows" in key_name.lower(): key_name = "win" key_code_to_name[key_code] = key_name except ValueError: # 跳过无法识别的无效键码 continue # 仅屏蔽有效键码 for key_code in key_code_to_name.keys(): keyboard.block_key(key_code) target_time = time.time() + 10 while time.time() < target_time: for key_code in key_code_to_name.keys(): if keyboard.is_pressed(key_code): key_name = key_code_to_name[key_code] print(f"Key {key_name} (code: {key_code}) is pressed.") # 添加短暂延时,减少CPU占用 time.sleep(0.01)
关键说明
keyboard.key_name()是模块内置方法,可直接将键码转换为人类可读的名称:- 键码30 → "a"
- 键码91/92 → "left windows"/"right windows"(可通过自定义逻辑统一为"win")
- 键码16 → "shift"
- 预生成映射字典避免了循环中重复调用转换方法,大幅提升检测效率
- 仅遍历有效键码,跳过无法识别的无效编码,减少不必要的判断
内容的提问来源于stack exchange,提问作者Hchap
相关产品推荐
相关产品推荐

