(Python-键盘模块)我在这里做错了什么!当我按下时,我希望映射按E按E,但按下Q,向上,向下和向左按

发布于 2025-02-11 18:23:45 字数 669 浏览 0 评论 0原文

我正在尝试抑制按键并将其重新映射到其他一些钥匙中。该代码看起来像这样:

from time import sleep
import keyboard
import os

os.chdir(os.path.dirname(__file__))

keys = {
    'up':'e',
    'down':'s',
    'left':'q'
}

for each in zip(keys.keys(), keys.values()):
    keyboard.on_press_key(each[0], lambda _:keyboard.press(each[1]), True)
    keyboard.on_release_key(each[0], lambda _:keyboard.release(each[1]), True)


while not keyboard.is_pressed('shift'):
    sleep(0.5)

但是当我运行此操作时,我希望在按下'e''键的键按 up up 's'时。 当我按 down 'q'时,只有在我按下左>左>键时,但是我得到了'q '键按所有这三个重新映射的键!我在这里做错了什么?

I'm trying to suppress keypresses and remap them to some other keys. The code looks something like this:

from time import sleep
import keyboard
import os

os.chdir(os.path.dirname(__file__))

keys = {
    'up':'e',
    'down':'s',
    'left':'q'
}

for each in zip(keys.keys(), keys.values()):
    keyboard.on_press_key(each[0], lambda _:keyboard.press(each[1]), True)
    keyboard.on_release_key(each[0], lambda _:keyboard.release(each[1]), True)


while not keyboard.is_pressed('shift'):
    sleep(0.5)

But when I run this thing, I expect to get key press of 'e' key when I press up, 's' when I press down and 'q' only when I press left key, But I'm getting 'q' key press for all these three remapped keys!. What am I doing wrong here?!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乙白 2025-02-18 18:23:45

发生这种情况是因为机械师如何python函数 bind values and grount values and grouments 。因此,您定义了三个回调,每个回调都使用“ Q”字母。而且,请不要zip(keys.keys(),keys.values()) - 尽管由于Python 3.7可能是安全的,所以很奇怪。

from time import sleep
import keyboard

keys = {
    'up': 'e',
    'down': 's',
    'left': 'q',
}

for orig, repl in keys.items():
    keyboard.on_press_key(orig, (lambda _, repl=repl: keyboard.press(repl)), True)
    keyboard.on_release_key(orig, (lambda _, repl=repl: keyboard.release(repl)), True)

while not keyboard.is_pressed('shift'):
    sleep(0.5)

This happens because of mechanics how python functions bind values and arguments. So you define three callbacks, each of them uses "q" letter. And please, don't zip(keys.keys(), keys.values()) - although since python 3.7 it is probably safe, it is weird.

from time import sleep
import keyboard

keys = {
    'up': 'e',
    'down': 's',
    'left': 'q',
}

for orig, repl in keys.items():
    keyboard.on_press_key(orig, (lambda _, repl=repl: keyboard.press(repl)), True)
    keyboard.on_release_key(orig, (lambda _, repl=repl: keyboard.release(repl)), True)

while not keyboard.is_pressed('shift'):
    sleep(0.5)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文