在 Python 中的 For 循环内绑定 keyboard.on_press_key

Binding keyboard.on_press_key inside a For Loop in Python

我想通过 For 循环使用 Python 的键盘模块设置 on_press_key 绑定,该循环遍历字典项。但是,绑定似乎没有正确分配。

这是我编写的示例程序,演示了我可以绑定的两种方式。一种是循环,一种是手动逐个字符:

import keyboard
import time

shortcuts = {
        "Key1":"a",
        "Key2":"b",
        "Key3":"c",
        }

def showText(text):
    print(text)
    
for text, hotkey in shortcuts.items():
    keyboard.on_press_key(hotkey, lambda _:showText(text))

keyboard.on_press_key("d", lambda _:showText("Key4"))
keyboard.on_press_key("e", lambda _:showText("Key5"))

while 1:
    time.sleep(1)

问题是通过循环 return“Key3”而不是它们各自的键完成的绑定。也就是说,如果我按“a”或“b”或“c”,它会打印“Key3”。但是“d”returns“Key4”和“e”returns“Key5”符合预期。

为什么绑定在 For 循环中没有按预期工作?有没有办法让它发挥作用?手动绑定每个键不仅乏味,而且在我稍后更新字典的情况下也为错误开辟了道路。

谢谢

@Aommaster 不知道是python的bug还是什么的

而不是在循环中 keyboard.on_press_key(hotkey, lambda _:showText(text)) 你可以创建一个函数并在循环中调用该函数,然后,它完美地工作。

import keyboard
import time

shortcuts = {
        "Key1":"a",
        "Key2":"b",
        "Key3":"c",
        }

def showText(text):
    print(text)

def bind_key(hotkey,text):
    keyboard.on_press_key(hotkey, lambda _:showText(text))
for text, hotkey in shortcuts.items():
    bind_key(hotkey,text)

keyboard.on_press_key("d", lambda _:showText("Key4"))
keyboard.on_press_key("e", lambda _:showText("Key5"))
# you can also call these using function.
# bind_key("d","Key4")
# bind_key("e","Key5")

while 1:
    time.sleep(1)