如何使用Python的keyboard库高效监听多个指定按键?
高效监听多个按键的Python实现方案
你遇到的问题我太懂了——轮询检测确实会占满CPU导致卡顿,而keyboard.wait()只能监听单个按键,确实有点局限。其实不用多线程也能完美解决,下面给你几个最优方案:
方案1:使用keyboard.add_hotkey()绑定多个按键
这个方法是keyboard库推荐的高效方式,它采用事件驱动的模式,不会阻塞主进程,只有当按键被触发时才执行对应操作,完全不会浪费CPU资源。
示例代码:
import keyboard import time def on_f4_press(): print("f4 is pressed!") def on_f5_press(): print("f5 is pressed!") # 绑定按键和对应的处理函数 keyboard.add_hotkey('f4', on_f4_press) keyboard.add_hotkey('f5', on_f5_press) # 让程序保持运行(因为add_hotkey是非阻塞的) try: while True: time.sleep(1) # 休眠减少CPU占用 except KeyboardInterrupt: print("程序已退出") finally: keyboard.unhook_all() # 清理所有按键监听
方案2:使用keyboard.on_press_event()监听全局按键事件
如果你需要更灵活的处理(比如根据不同按键动态判断操作),可以用这个全局事件监听方法,所有按键按下的事件都会触发你的回调函数:
import keyboard import time def handle_key_press(event): if event.name == 'f4': print("f4 is pressed!") elif event.name == 'f5': print("f5 is pressed!") # 注册按键按下事件的回调函数 keyboard.on_press_event(handle_key_press) # 保持程序运行 try: while True: time.sleep(1) except KeyboardInterrupt: print("程序已退出") finally: keyboard.unhook_all()
为什么不推荐多线程?
其实上面的两种方案已经是异步的事件驱动模式了——keyboard库本身已经在后台处理了按键监听的线程逻辑,你只需要专注于写按键触发后的业务代码就行。多线程反而会增加代码复杂度,完全没必要画蛇添足。
补充注意事项
- 确保你已经安装了
keyboard库:执行pip install keyboard完成安装 - 部分系统可能需要管理员权限才能监听全局按键,如果运行时报错,试试用管理员身份启动脚本
- 如果需要监听组合键(比如
Ctrl+F4),add_hotkey也支持:keyboard.add_hotkey('ctrl+f4', on_ctrl_f4_press)
内容的提问来源于stack exchange,提问作者junior_developer181
相关产品推荐
相关产品推荐

