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

如何在Pynput的on_pressed/on_release处理器中检测Ctrl、Shift或Alt是否按下?

可以通过Pynput库在按键事件处理器中检测Ctrl/Shift/Alt的按下状态

当然可以,Pynput提供了两种实用方式实现这个需求:

方式一:通过键盘控制器实时查询按键状态

使用keyboard.Controller()的pressed()方法,能在事件处理器中直接查询指定按键的按下状态。

示例代码:

from pynput import keyboard

def on_press(key):
    # 初始化键盘控制器
    controller = keyboard.Controller()
    
    # 检测Ctrl键(包含左右Ctrl)
    ctrl_pressed = keyboard.Key.ctrl in controller.pressed()
    # 检测Shift键
    shift_pressed = keyboard.Key.shift in controller.pressed()
    # 检测Alt键
    alt_pressed = keyboard.Key.alt in controller.pressed()
    
    print(f"Ctrl: {ctrl_pressed}, Shift: {shift_pressed}, Alt: {alt_pressed}")
    
    # 按Esc键退出监听
    if key == keyboard.Key.esc:
        return False

def on_release(key):
    pass

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

方式二:手动跟踪按键状态

维护一个集合记录当前按下的按键,在on_press和on_release事件中更新集合,之后直接查询集合即可。这种方式无需重复创建控制器,性能更优。

示例代码:

from pynput import keyboard

# 存储当前按下的按键
pressed_keys = set()

def on_press(key):
    pressed_keys.add(key)
    
    # 检测组合键状态(区分左右按键)
    ctrl_pressed = keyboard.Key.ctrl in pressed_keys or keyboard.Key.ctrl_l in pressed_keys or keyboard.Key.ctrl_r in pressed_keys
    shift_pressed = keyboard.Key.shift in pressed_keys or keyboard.Key.shift_l in pressed_keys or keyboard.Key.shift_r in pressed_keys
    alt_pressed = keyboard.Key.alt in pressed_keys or keyboard.Key.alt_l in pressed_keys or keyboard.Key.alt_r in pressed_keys
    
    print(f"Ctrl: {ctrl_pressed}, Shift: {shift_pressed}, Alt: {alt_pressed}")
    
    if key == keyboard.Key.esc:
        return False

def on_release(key):
    if key in pressed_keys:
        pressed_keys.remove(key)

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

如果需要精准区分左右按键(比如左Ctrl和右Ctrl),直接判断keyboard.Key.ctrl_l或keyboard.Key.ctrl_r这类具体按键即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:04