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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:02:49