You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python keyboard模块的按键编码转换为字符?

解决Python keyboard模块键码转按键名称/字符的问题

要解决键码到可读按键名称的转换问题,可利用keyboard模块内置的键名转换方法,同时预生成映射字典提升检测效率,具体实现如下:

核心方案

  1. 预生成键码→按键名称的映射表,提前过滤无效键码,避免循环中重复执行转换逻辑
  2. 使用keyboard.key_name()完成键码到标准名称的转换,支持普通字符键与特殊功能键(如win、shift)
  3. 优化检测循环,只遍历有效键码并添加延时降低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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:39:40