基于PyQT实现区分左键双击和单击


Posted in Python onMay 19, 2020

 在PyQt中没有直接提供左键双击的判断方法,需要自己实现,其思路主要如下所示:

1、起动一个定时器,判断在指定的时间之内,点击次数超过2次,则视为双击(其主要思路判断两次点击的时间差在预测的条件以内)

2、 起动一个定时器,判断在指定的时间之内,点击次数超过2次,另外再获取鼠标点击的坐标,如果前后两次点击的坐标位置,属于同一个位置,满足这两个条件则判断为双击(其主要思路判断两次点击的时间差在预测的条件以内,且点击的坐标在预设的坐标之内,允许存在一定的偏差)

from PyQt5.QtCore import QTimer
from PyQt5 import QtCore, QtGui, QtWidgets

class myWidgets(QtWidgets.QTableWidget): 

  def __init__(self, parent=None):
    super(myWidgets, self).__init__(parent)
    self.isDoubleClick = False
    self.mouse = ""
  def mousePressEvent(self, e): 
    # 左键按下
    if e.buttons() == QtCore.Qt.LeftButton:
      QTimer.singleShot(0, lambda: self.judgeClick(e))
    # 右键按下
    elif e.buttons() == QtCore.Qt.RightButton:
      self.mouse = "右"
    # 中键按下
    elif e.buttons() == QtCore.Qt.MidButton:
      self.mouse = '中'
    # 左右键同时按下
    elif e.buttons() == QtCore.Qt.LeftButton | QtCore.Qt.RightButton:
      self.mouse = '左右'
    # 左中键同时按下
    elif e.buttons() == QtCore.Qt.LeftButton | QtCore.Qt.MidButton:
      self.mouse = '左中'
    # 右中键同时按下
    elif e.buttons() == QtCore.Qt.MidButton | QtCore.Qt.RightButton:
      self.mouse = '右中'
    # 左中右键同时按下
    elif e.buttons() == QtCore.Qt.LeftButton | QtCore.Qt.MidButton | QtCore.Qt.RightButton:
      self.mouse = '左中右'
  def mouseDoubleClickEvent(self,e):
    # 双击
    self.mouse = "双击"
    self.isDoubleClick=True

  def judgeClick(self,e):
    if self.isDoubleClick== False:
      self.mouse="左"
    else:
      self.isDoubleClick=False
      self.mouse = "双击"

from PyQt5.QtCore import QTimer
from PyQt5 import QtCore, QtGui, QtWidgets

class myWidgets(QtWidgets.QTableWidget):

  def __init__(self, parent=None):
    super(myWidgets, self).__init__(parent)
    self.mouse = ""
    self.timer=QTimer(self)
    self.timer.timeout.connect(self.singleClicked)

  def singleClicked(self):
    if self.timer.isActive():
      self.timer.stop()
      self.mouse="左"

  def mouseDoubleClickEvent(self,e):
    if self.timer.isActive() and e.buttons() ==QtCore.Qt.LeftButton:
      self.timer.stop()
      self.mouse="双击"
    super(myWidgets,self).mouseDoubleClickEvent(e)

  def mousePressEvent(self,e):
    if e.buttons()== QtCore.Qt.LeftButton:
      self.timer.start(1000)
    elif e.buttons()== QtCore.Qt.RightButton:
      self.mouse="右"
    super(myWidgets,self).mousePressEvent(e)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python发送邮件示例(支持中文邮件标题)
Feb 16 Python
Python help()函数用法详解
Mar 11 Python
详解Python编程中包的概念与管理
Oct 16 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python 闭包的使用方法
Sep 07 Python
python实现人脸识别代码
Nov 08 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 Python
Python的三个重要函数详解
Jan 18 Python
Python更换pip源方法过程解析
May 19 #Python
解决Django Haystack全文检索为空的问题
May 19 #Python
浅谈django 重载str 方法
May 19 #Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 #Python
在Django中自定义filter并在template中的使用详解
May 19 #Python
Django Model中字段(field)的各种选项说明
May 19 #Python
Django模板获取field的verbose_name实例
May 19 #Python
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
树结构之JavaScript
2017/01/24 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python开发游戏的前期准备
2019/05/05 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
python numpy库np.percentile用法说明
2020/06/08 Python
公司管理建议书范文
2014/03/12 职场文书
中式结婚主持词
2014/03/14 职场文书
仓库规划计划书
2014/04/28 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
php双向队列实例讲解
2021/11/17 PHP
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python