簡體   English   中英

如何防止 function 在鼠標單擊時運行,直到上一個完成

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

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