我用pynput编写了一个标准的keylistener,但是当使用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
键似乎没有按两次,只发布了两次。这是预期的行为吗?如果没有,应该采取什么措施来避免这种情况?
答案 0 :(得分:1)
这是 pynput 中的错误。
正如您所注意到的,事件可以从系统和调用Listener
时达到Controller
。后者仅适用于 Xorg 和 win32 ,因为它们不会将合成事件传播给侦听器。
或者我想。事实证明,在 win32 上,这仅适用于鼠标事件;键盘事件似乎正常传播。无论如何,我推出了一个提议的解决方案here。
如果您有机会对其进行测试,我将不胜感激,否则我会在几天内将其合并为主人并制作新版本。我只能通过 VirtualBox 访问 win32 ,所以我希望进行更多的裸机测试。