Pynput中Controller.type方法在on_press按键事件内调用输出异常问题
这不是pynput的已知问题,是你的调用逻辑存在场景冲突:
当on_press事件触发时,你按下的左Alt键正处于按下未释放的状态,此时调用controll.type()输入字符,系统会默认你是按住Alt键的同时按这些字符键,相当于触发了窗口菜单的快捷键组合,大部分字符输入会被系统拦截,只有少量无对应快捷键的字符能正常输出,就出现了你看到的输出残缺的问题。
方案1:输入前手动释放Alt键
如果需要在Alt按下的瞬间就触发输入,可以在调用type前先主动释放已经按下的左Alt键:
def on_press(key): if(key == keyboard.Key.alt_l): # 先释放处于按下状态的左Alt,避免和后续输入的字符形成快捷键 controll.release(keyboard.Key.alt_l) controll.type("RIGHT !!!") if(key == keyboard.Key.delete or key == keyboard.Key.enter): return False
方案2:将输入逻辑绑定到Alt释放事件
如果不需要按下瞬间触发,可以把输入逻辑放到on_release回调中,此时Alt键已经自然释放,不会和输入产生冲突:
def on_press(key): if(key == keyboard.Key.delete or key == keyboard.Key.enter): return False def on_release(key): if(key == keyboard.Key.alt_l): controll.type("RIGHT !!!") # 监听器新增on_release回调绑定 with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: listener.join()
两种方案都可以解决你遇到的输出残缺问题,Windows平台下测试有效。
内容的提问来源于stack exchange,提问作者rick
相关产品推荐
相关产品推荐

