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

如何在Python中检测按键是长按还是短按?

检测按键长按/短按的正确实现

原代码存在的问题

你的代码逻辑有几个核心错误:

  1. 每次调用listener()时,index都会被重置为0,根本无法累计状态来判断长按/短按
  2. 判断逻辑完全颠倒,而且没有基于按键按下的实际时长来区分
  3. 用while True轮询加time.sleep(1)的方式,无法精准捕捉按键的按下和释放时机,导致判断完全失效

正确实现方案

利用keyboard模块的事件回调机制,记录按键按下和释放的时间戳,通过计算时长来区分长按和短按。以下是可直接运行的代码:

import keyboard
import time

# 自定义长按阈值(比如1秒,可根据需求调整)
LONG_PRESS_THRESHOLD = 1.0
press_start_time = None

def on_key_press(e):
    global press_start_time
    # 按键按下时记录当前时间
    press_start_time = time.time()

def on_key_release(e):
    global press_start_time
    if press_start_time is None:
        return
    # 计算按键持续时长
    press_duration = time.time() - press_start_time
    press_start_time = None  # 重置时间记录
    
    if press_duration >= LONG_PRESS_THRESHOLD:
        print(f"按键 '{e.name}' 是长按,时长:{press_duration:.2f}秒")
    else:
        print(f"按键 '{e.name}' 是短按,时长:{press_duration:.2f}秒")

# 绑定目标按键(这里是'p')的按下和释放事件
keyboard.on_press_key('p', on_key_press)
keyboard.on_release_key('p', on_key_release)

# 保持程序监听状态,按Ctrl+C退出
print("正在监听按键p,按Ctrl+C退出...")
keyboard.wait()

代码说明

  • on_key_press:按键按下时触发,记录按下的时间戳
  • on_key_release:按键释放时触发,计算从按下到释放的时长,和预设阈值对比后输出判断结果
  • 采用事件回调而非轮询,能精准捕捉按键状态变化,避免延迟或误判

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:10:06