[英]How to prevent a function from running on mouse click until previous completes
我正在嘗試在 Python 中設置鼠標偵聽器,只要 function 尚未運行,它就會在鼠標單擊時運行 function。
from pynput import mouse def do_work(x, y, button, pressed): print(f"Button pressed. Doing work.") time.sleep(3) print(f"Finished work.") # Setup mouse listener. with mouse.Listener(on_click=do_work) as listener: listener.join()
所以在上面的例子中,即使我連續按下鼠標按鈕, do_work
也只會每三秒運行一次。
感覺我應該能夠在線程中設置它,但我不知道如何將線程傳遞給do_work
以便它可以測試線程是否處於活動狀態。
do_work
運行sleep
,這會阻止listener
器更長的時間,並且listener
器無法從系統獲得其他點擊,並且它不能跳過它們 - 他們等到sleep
完成工作,然后listener
器從過去獲取這些點擊並一次又一次地運行do_work
。
你必須在ard中運行do_work
。 Listener
不應該直接運行do_work
但它應該運行其他 function (即on_click
)並且這個 function 應該檢查點擊並在單獨的線程中啟動do_work
或跳過點擊。
from pynput import mouse
import time
import threading
# --- functions ---
def do_work(x, y, button, pressed):
print("Button pressed. Doing work.")
time.sleep(3)
print("Finished work.")
def on_click(x, y, button, pressed):
global job
if pressed:
if job is None or not job.is_alive():
job = threading.Thread(target=do_work, args=(x, y, button, pressed))
job.start()
#else:
# print("skiping this click")
# --- main ---
job = None # default value at start
# Setup mouse listener.
with mouse.Listener(on_click=on_click) as listener:
# ... other code ...
listener.join()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.