使用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
相关产品推荐
相关产品推荐

