python - 编写了一个按键监听器,但它执行了两次

标签 python python-3.x

我用 pynput 编写了一个标准的按键监听器,但是当使用 keyboard.type 时,按键似乎被释放了两次。

from pynput.keyboard import Controller, Listener

keyboard = Controller()

def on_release(key):
    print('key {} released'.format(key))
    if key.char == 'a':
        keyboard.type('b')

with Listener(on_release=on_release) as listener:
    listener.join()

# Pressing 'a' yields:
# 
# key u'a' released
# key u'b' released
# key u'b' released

按键似乎不是按下了两次,而是松开了两次。这是预期的行为吗?如果不是,应该怎样做才能避免这种情况?

最佳答案

这是pynput中的一个错误。

正如您所注意到的,事件可以从系统以及调用 Controller 时到达 Listener。后者仅适用于 Xorgwin32,因为它们不会将合成事件传播给监听器。

或者我是这么想的。事实证明,在 win32 上,这只适用于鼠标事件;键盘事件似乎正常传播。无论如何,我已经提出了一个建议的解决方案here .

如果您有机会测试它,我将不胜感激,否则我会在几天内将其合并到 master 中并制作一个新版本。我只能通过 VirtualBox 访问 win32,因此我希望进行更多裸机测试。

关于python - 编写了一个按键监听器,但它执行了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250525/

相关文章:

python - 如何刷新 Matplotlib 中的文本?

python - 调整 QGraphicsItem 中心的大小与鼠标速度成正比?

django - pip打包一个django项目

python - "for line in..."导致 UnicodeDecodeError : 'utf-8' codec can't decode byte

python - pytest.config.getoption 替代方案失败

python - 如何在循环中动态更新绘图?

python - 从 RAM 中删除变量

python - 字段未显示在 product.template odoo8 中

python - 在 python 中使用 sleep 制作一个计时器。如何考虑计算时间?

python - 为什么在使用 Pandas 的内置绘图调用而不是通过 Matplotlib 绘图时我的日期轴格式被破坏了?