相关文章推荐
淡定的盒饭  ·  ASP.NET 核心 Blazor ...·  1 月前    · 
失望的鸡蛋面  ·  循环吧,代码 - 学习 Web 开发 | MDN·  1 月前    · 
爱运动的小狗  ·  元数据 | TDengine 文档 | 涛思数据·  4 月前    · 
紧张的手电筒  ·  有村架纯_百度百科·  4 月前    · 
老实的冲锋衣  ·  清华附中嘉兴实验学校公开招聘2024年事业编 ...·  6 月前    · 
慷慨的抽屉  ·  隆阳11名体育教师获省“好身体”竞赛奖-保山 ...·  11 月前    · 
刚毅的香烟  ·  Logback日志输出配置和使用-要点攻略 ...·  1 年前    · 
Code  ›  如何监控鼠标双击在pynput中?开发者社区
按钮
https://cloud.tencent.com/developer/ask/sof/108009044
侠义非凡的剪刀
2 年前
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
提问
问 如何监控鼠标双击在pynput中?
Stack Overflow用户
提问于 2020-08-31 18:36:59
EN

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

2 756 0 票数 1
EN
python
automation
pynput

回答 2

Stack Overflow用户

发布于 2020-08-31 19:46:40

当您想要获得同时也是 double click 的时候,没有一种简单的方法可以获得 single click 。

要控制 double click (不控制 single click ),您可以记住什么时候是 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()

但问题是,当您还想控制单次单击时,因为它将在第一次单击之后运行一些函数 0.3s ,以通知您它不是双击而是单次单击--它需要线程定时器,或者需要运行其他线程,在所有时间都运行循环,将curren时间与 previous_left 进行比较,如果在 previous_left 之后没有单击0.3s,则将其视为单击。

我没有这种情况的例子。

票数 2
EN

Stack Overflow用户

发布于 2022-05-28 13:11:48

除了@furas的答案,我想建议如何处理单一和双点击事件。您只需创建一个将创建线程的函数,并从侦听器调用它:

import threading
from pynput.mouse import Listener, Button
import time
previous_left = 0
previous_right = 0
previous_middle = 0
def click_handler(x,y,button, pressed):
    x = threading.Thread(target=on_click, args=(x,y,button,pressed))
    x.start()
 
推荐文章
淡定的盒饭  ·  ASP.NET 核心 Blazor 渲染性能最佳做法 | Microsoft Learn
1 月前
失望的鸡蛋面  ·  循环吧,代码 - 学习 Web 开发 | MDN
1 月前
爱运动的小狗  ·  元数据 | TDengine 文档 | 涛思数据
4 月前
紧张的手电筒  ·  有村架纯_百度百科
4 月前
老实的冲锋衣  ·  清华附中嘉兴实验学校公开招聘2024年事业编制教师(第三批)公告
6 月前
慷慨的抽屉  ·  隆阳11名体育教师获省“好身体”竞赛奖-保山市人民政府门户网站
11 月前
刚毅的香烟  ·  Logback日志输出配置和使用-要点攻略 - ycr_day_day_up - 博客园
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号