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 中似乎可以工作,但不太正确。
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
是一个用于处理整个系统使用键盘的模块,而不仅仅是“应该”由您的代码负责的键盘事件。它将拦截所有键盘事件,而不仅仅是您在应用程序窗口中键入的内容。