input() 方法在执行之前捕获所有按键事件

问题描述 投票:0回答:1
from pynput.keyboard import Events, Key, Listener

def on_release(key):
  if key == Key.enter: 
    return False

print("PRESS ENTER")

with Events() as events:
  for event in events:
    if type(event) is Events.Release and event.key == Key.enter:
      break

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

input("First input: ")
input("Second input: ")

上面的代码将“跳过”第一个输入法,因为它会捕获在 with 中按下的 Enter 键。

它捕获您将按下的每个键,例如:如果我执行脚本并输入“hello”并按回车键,这将是结果:

First input: hello
Second input: 

如果我按两次回车键,程序将结束执行,因为两个 input() 都会被跳过。

有谁知道为什么会发生这种情况以及如何避免这种行为?

谢谢

编辑:这两个功能都不适用于侦听器,如果同时按住它们,您将被迫按 Enter 键两次,程序将终止,而您无法在任一功能中输入内容。

我在 Windows 命令行中执行脚本,而在 vscode 中似乎可以工作,但不太正确。

python python-3.x
1个回答
0
投票

pynput.keyboard.Events
不支持抑制键盘事件。
Events
实例正在侦听时发生的键盘事件仍将传递到系统的其余部分。

如果你想抑制键盘事件,你可以使用

pynput.keyboard.Listener
类,并提供
suppress=True
:

with pynput.keyboard.Listener(on_release=on_release, suppress=True) as listener:
    listener.join()

请注意,

pynput.keyboard
是一个用于处理整个系统使用键盘的模块,而不仅仅是“应该”由您的代码负责的键盘事件。它将拦截所有键盘事件,而不仅仅是您在应用程序窗口中键入的内容。

© www.soinside.com 2019 - 2024. All rights reserved.