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

使用keyboard库检测按键时出现大小写输出随机问题求助

问题分析与解决

你的代码问题出在同时循环检测'D'和'd',但keyboard.is_pressed()对于字母按键来说,物理键是同一个,区分大小写完全依赖Shift键或Caps Lock的状态。循环会快速交替执行两个检测语句,所以会随机触发其中一个,导致输出混乱。

修复方案1:使用按键回调(推荐)

用keyboard.on_press()注册回调函数,直接获取系统识别到的实际输入字符,不需要自己判断大小写:

import keyboard

def on_key_press(event):
    # 只处理字母类按键
    if event.name.isalpha():
        print(event.name)

# 注册按键按下事件的回调
keyboard.on_press(on_key_press)

# 保持程序运行,按ESC键退出
keyboard.wait('esc')

修复方案2:手动判断大小写状态

如果坚持用循环检测的方式,应该先检测物理按键,再结合Shift/Caps Lock的状态判断输出:

import keyboard
import time

def check_d_key():
    # 检测物理D键是否按下
    if keyboard.is_pressed('d'):
        time.sleep(0.08)
        # 判断Shift是否按下,或者Caps Lock是否开启
        is_upper = keyboard.is_pressed('shift') or keyboard.is_caps_lock()
        print('D' if is_upper else 'd')

while True:
    check_d_key()

为什么原代码失效?

原代码中,pressed_key('D')和pressed_key('d')本质上检测的是同一个物理按键。当你按下D键时,循环会快速交替执行这两个检测,哪个先执行到就会输出对应的字符,所以结果完全随机。

内容的提问来源于stack exchange,提问作者NotN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:16