我用 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
。后者仅适用于 Xorg 和 win32,因为它们不会将合成事件传播给监听器。
或者我是这么想的。事实证明,在 win32 上,这只适用于鼠标事件;键盘事件似乎正常传播。无论如何,我已经提出了一个建议的解决方案here .
如果您有机会测试它,我将不胜感激,否则我会在几天内将其合并到 master 中并制作一个新版本。我只能通过 VirtualBox 访问 win32,因此我希望进行更多裸机测试。
关于python - 编写了一个按键监听器,但它执行了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250525/