[英]pynput on_press triggerd by own keyboard.press
如标题中所述,pynput 侦听器的 function on_press
由其自己的按键触发。
我尝试做几件事,比如添加一个 boolean,这样当代码本身运行 keypress 或 keyrelease 时,它不会打印或按下按键,甚至会增加大量延迟,但这些都不起作用。
代码:
from pynput import keyboard
from pynput.keyboard import Key, Controller
import time
k = Controller()
randomVar = True
def on_press(key):
global randomVar
if randomVar:
print(key)
randomVar = False
k.press(key)
time.sleep(0.45)
randomVar = True
def on_release(key):
global randomVar
if randomVar:
print(key)
randomVar = False
k.release(key)
time.sleep(0.45)
randomVar = True
# Collect events until released
with keyboard.Listener(suppress=True, on_press=on_press, on_release=on_release) as listener:
try:
listener.join()
except Exception as e:
print('{0} was pressed'.format(e.args[0]))
当我按d
时预期为 output
'd'
'd'
实际 output:
'd'
'd'
'd'
'd'
'd'
'd'
...
编辑:我也尝试将所有内容都放在 on_press 中,但这给出了相同的结果:
def on_press(key):
global randomVar
if randomVar:
print(key)
randomVar = False
k.press(key)
k.release(key)
time.sleep(0.45)
randomVar = True
def on_release(key):
pass
我的解决方案是一种糟糕的方法,但目前经过数小时的努力,这是我唯一能想到的。 它停止监听器然后按下键,然后再次启动监听器,使其成为一个停止和启动监听器的循环,这是非常次优的
我很想听听人们怎么说这会有什么不同,但就目前而言,这是我唯一的解决方案:
from pynput import keyboard
from pynput.keyboard import Controller
k = Controller()
def on_press(key):
global listener
print(str(key))
listener.stop()
def on_release(key):
pass
while True:
listener = keyboard.Listener(suppress=True, on_press=on_press, on_release=on_release)
listener.start()
listener.join()
k.press("l")
k.release("l")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.