Python键盘库箭头键问题

Python键盘库箭头键问题,python,keyboard,Python,Keyboard,我正在写一个脚本,它截图并解码图像名称中的特定按键,如下图所示。 我的问题是,当我按下键盘左箭头时,数字4也被按下。 我在谷歌或键盘库的文档中找不到任何东西。我正在使用Windows和Python 3.6.5 (75,) left arrow pressed (5, 75) 4 pressed 向下箭头也会发生同样的情况,但数字是3 (80,) down arrow pressed (3, 80) 2 pressed 代码: “e”, “f” ] 您可能需要先停用NumLock按钮。当Num

我正在写一个脚本,它截图并解码图像名称中的特定按键,如下图所示。 我的问题是,当我按下键盘左箭头时,数字4也被按下。 我在谷歌或键盘库的文档中找不到任何东西。我正在使用Windows和Python 3.6.5

(75,)
left arrow pressed
(5, 75)
4 pressed
向下箭头也会发生同样的情况,但数字是3

(80,)
down arrow pressed
(3, 80)
2 pressed
代码:

“e”, “f” ]


您可能需要先停用NumLock按钮。当NumLock处于激活状态时,我在按下Shift键时遇到了一些问题。

键盘模块为此类实例提供了简单的解决方案,它们使用事件触发激活,而不是尝试中使用的轮询

示例代码:

import keyboard

def handleLeftKey(e):
    if keyboard.is_pressed("4"):
        print("left arrow was pressed w/ key 4")
        # work your magic

keyboard.on_press_key("left", handleLeftKey)
# self-explanitory: when the left key is pressed down then do something

keyboard.on_release_key("left", handleLeftKey02)
# also self-explanitory: when the left key is released then do something

# don't use both ...on_release & ...on_press or it will be
# triggered twice per key-use (1 up, 1 down)
替换下面的代码,并根据您的需要进行更改

if __name__ == "__main__":
    while True:
        code = []
        try:
            for key in keys:
                if keyboard.is_pressed(key):
                    print(keyboard.key_to_scan_codes(key))
                    print(f"{key} pressed")
                    code.append(1)
                else:
                    code.append(0)
另一种更具活力的方法如下所示:

import keyboard

keys = [
    "down",
    "up",
    "left",
    "right",
    "w",
    "s",
    "a",
    "d",
    "1",
    "2",
    "3",
    "4",
    "q",
    "e",
    "f"
]

def kbdCallback(e):
    found = False
    for key in keys:
        if key == keyboard.normalize_name(e.name):
            print(f"{key} was pressed")
            found = True
            # work your magic

    if found == True:
        if e.name == "left":
            if keyboard.is_pressed("4"):
                print("4 & left arrow were pressed together!")
                # work your magic

keyboard.on_press(kbdCallback)
# same as keyboard.on_press_key, but it does this for EVERY key
我注意到的另一个问题是,您使用的是
“左箭头”
,而实际上它被识别为
“左”
(至少在我的系统上,它在您的系统上可能不同,但我想您希望它在所有系统上都能工作,因此使用
“左”
会更安全)

您可以使用的最后一种方法是非常静态类型的,没有动态功能,但在
“4+left”
“left+4”


你似乎足够聪明,可以从中找出其余的问题。

不幸的是,一切都没有改变
if __name__ == "__main__":
    while True:
        code = []
        try:
            for key in keys:
                if keyboard.is_pressed(key):
                    print(keyboard.key_to_scan_codes(key))
                    print(f"{key} pressed")
                    code.append(1)
                else:
                    code.append(0)
import keyboard

keys = [
    "down",
    "up",
    "left",
    "right",
    "w",
    "s",
    "a",
    "d",
    "1",
    "2",
    "3",
    "4",
    "q",
    "e",
    "f"
]

def kbdCallback(e):
    found = False
    for key in keys:
        if key == keyboard.normalize_name(e.name):
            print(f"{key} was pressed")
            found = True
            # work your magic

    if found == True:
        if e.name == "left":
            if keyboard.is_pressed("4"):
                print("4 & left arrow were pressed together!")
                # work your magic

keyboard.on_press(kbdCallback)
# same as keyboard.on_press_key, but it does this for EVERY key
import keyboard

def left4trigger:
    print("the keys were pressed")

keyboard.add_hotkey("4+left", left4trigger)
# works as 4+left or left+4 (all of the examples do)