编写了一个keylistener,但它执行了两次

时间:2017-07-22 04:01:09

标签: python python-3.x

我用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

键似乎没有按两次,只发布了两次。这是预期的行为吗?如果没有,应该采取什么措施来避免这种情况?

1 个答案:

答案 0 :(得分:1)

这是 pynput 中的错误。

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

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

如果您有机会对其进行测试,我将不胜感激,否则我会在几天内将其合并为主人并制作新版本。我只能通过 VirtualBox 访问 win32 ,所以我希望进行更多的裸机测试。