在 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)
我想通过 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)