如何在pynput中监视鼠标双击?

2024-04-19 19:42:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在监视过程中出现双击时,我面临一个问题。“有谁能提供一个代码,告诉我如何使用pynput在python中监视鼠标双击?”


Tags: 代码过程鼠标pynput
1条回答
网友
1楼 · 发布于 2024-04-19 19:42:37

当您希望同时获取single click时,没有简单的方法来获取double click


要控制double click(不控制single click),您可以记住was previous click的时间并与current click进行比较。如果差异为0.3s,则可以将其视为double click

代码仅用于左键单击

from pynput.mouse import Listener, Button
import time

previous_left = 0

def on_click(x, y, button, pressed):
    global previous_left
    
    #text = 'Pressed' if pressed else 'Released'
    #print('{0} {1} at {2}'.format(text, button, (x, y)))

    double_click_left = False
    
    # double click left button
    if pressed and button == Button.left:
        current_left = time.time()
        
        diff_left = current_left - previous_left
        print('diff left:', diff_left)
        
        if diff_left < 0.3:
            print('double click left')
            double_click_left = True
            
        previous_left = current_left
    
    # other code
    
    if double_click_left:
        # Stop listener
        return False

with Listener(on_click=on_click) as listener:
    # ... some code ...
    listener.join()

其他按钮的代码与此类似

from pynput.mouse import Listener, Button
import time

previous_left = 0
previous_right = 0
previous_middle = 0

def on_click(x, y, button, pressed):
    global previous_left
    global previous_right
    global previous_middle
    
    #text = 'Pressed' if pressed else 'Released'
    #print('{0} {1} at {2}'.format(text, button, (x, y)))

    double_click_left = False
    double_click_right = False
    double_click_middle = False
    
    # double click left button
    if pressed and button == Button.left:
        current_left = time.time()
        
        diff_left = current_left - previous_left
        print('diff left:', diff_left)
        
        if diff_left < 0.3:
            print('double click left')
            double_click_left = True
            
        previous_left = current_left
    
    # double click right button
    if pressed and button == Button.right:
        current_right = time.time()
        
        diff_right = current_right - previous_right
        print('diff right:', diff_right)
        
        if diff_right < 0.3:
            print('double click right')
            double_click_right = True
            
        previous_right = current_right

    # double click middle button
    if pressed and button == Button.middle:
        current_middle = time.time()
        
        diff_middle = current_middle - previous_middle
        print('diff middle:', diff_middle)
        
        if diff_middle < 0.3:
            print('double click middle')
            double_click_middle = True
            
        previous_middle = current_middle

    # other code
    
    if double_click_left:
        # Stop listener
        return False


with Listener(on_click=on_click) as listener:
    # ... some code ...
    listener.join()

但问题是,当您还想控制单次单击时,因为它会在第一次单击后运行一些函数^{,通知您它不是双击而是单次单击-它需要线程计时器,或者需要运行其他运行循环的线程,该线程始终将当前时间与previous_left进行比较如果在previous_left之后没有点击0.3s,则将其视为单次点击

我没有这种情况的例子

相关问题 更多 >