簡體   English   中英

pynput on_press 由自己的 keyboard.press 觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM