绑定键盘.Python For循环中的on_press_key



我想通过使用Python的Keyboard模块通过迭代字典项的For循环来设置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)

问题是通过循环返回"Key3"而不是它们各自的键。也就是说,如果我按下&;a&;或";b"或者"c",它将打印&;Key3"。但"d"返回"Key4"one_answers";e"返回"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)

最新更新