Python中的Ctrl + Shift组合键

问题描述

我正在研究需要用户交互的代码段:按下Esc或按下Ctrl+Shift

我正在努力结合Ctrl+Shift。下面的代码通过Esc按钮可以正常工作。但是,当最初按Ctrl+Shift时(在按Esc之前)它不会打印任何内容,而至少按过一次Esc后,它只对Shift有效,但对Ctrl-这不是我想要的。如何将CtrlShift绑定在一起?

from pynput import keyboard

COMBINATIONS = [
    { keyboard.Key.shift,keyboard.Key.ctrl },{ keyboard.Key.esc }
]

# The currently active modifiers
current = set()

def execute():
    print ("pressed!")

def on_press(key):
    if any([key in COMBO for COMBO in COMBINATIONS]):
        current.add(key)
        if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
            execute()

def on_release(key):
    try:
        current.remove(key)
    except KeyError:
        pass

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

解决方法

如果将print(key)放在on_press的开头,则会看到 CTRL 键会生成ctrl_l或{{1} }键(取决于您所按下的键),不是一个ctrl_r键。

因此,您要么必须处理它们中的任何一个,要么以一些可怕的ctrl代码段结尾,或者仅在顶部进行翻译:

any/all/any

使用翻译功能if key == keyboard.Key.ctrl_l or key == keyboard.Key.ctrl_r: key = keyboard.Key.ctrl 处理此问题的版本(用于 CTRL SHIFT 键,因为后者似乎可以生成xlate())以及检测键的释放,如下所示:

shift/shift_r