如何在Python中检测热键

问题描述 投票:0回答:1

我需要一种在纯Python代码中检测热键按下的方法。

我尝试使用我编写的代码片段:

import pynput

def on_press_keyboard(key):
    try:
        print('hold ' + str(key.char))
    except AttributeError:
        print('hold ' + str(key))

def on_release_keyboard(key):
    try:
        print('release ' + str(key.char))
    except AttributeError:
        print('release ' + str(key))


keyboard_listener = pynput.keyboard.Listener(on_press=on_press_keyboard, on_release=on_release_keyboard)
keyboard_listener.start()
keyboard_listener.join()

但是在 on_press_keyboard 函数中,当我同时按下多个键时,它会打印奇怪的,例如,这是我按 Ctrl+a 时的输出:

hold Key.ctrl_l
hold ☺
release ☺
release Key.ctrl_l

它印有笑脸??

我怎样才能让它正确地单独打印这些键,例如使其输出如下:

hold Key.ctrl_l
hold a
release a
release Key.ctrl_l

Hot-Key detected: Ctrl+a
python python-3.x hotkeys pynput
1个回答
0
投票

我做了很多挖掘,这是我能找到的检测热键的最佳方法。

Pynput
几乎是不可能的,因为它会出现那些奇怪的字符。
Keyboard
的前景并不乐观,但您可以检测到
keyboard
中是否按下了热键。这是我想到的一个例子:

import keyboard

hotkeys = []
letters = 'abcdefghijklmnopqrstuvwxyz'

def on_press(hotkey):
    print(f"You pressed a hotkey: {hotkey}")

for i in range(2):
    for letter in range(26):
        if i == 0:
            hotkeys.append(("ctrl", letters[letter]))
        else:
            hotkeys.append(("alt", letters[letter]))

while True:
    for hotkey in hotkeys:
        if keyboard.is_pressed(f"{hotkey[0]}+{hotkey[1]}"):
            on_press(f"{hotkey[0]} + {hotkey[1]}")

这是我能想到的最好的代码。首先,我们创建一个名为

hotkeys
的列表来存储所有可能的热键配对(我只做了 ctrl 和 alt)。接下来,我将它与字母表中的所有字母配对。如果需要,您可以添加更多可能的热键组合。该代码工作完美,但效率非常低,因为它需要代码检查大量热键组合,并且仅限于您决定放入列表中的热键数量。

© www.soinside.com 2019 - 2024. All rights reserved.