基于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中__init__()方法的高级应用
May 11 Python
Python中的列表生成式与生成器学习教程
Mar 13 Python
python实现字符串和字典的转换
Sep 29 Python
django2.0扩展用户字段示例
Feb 13 Python
python numpy中cumsum的用法详解
Oct 17 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Django使用rest_framework写出API
May 21 Python
python数据类型强制转换实例详解
Jun 22 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Python基础之元编程知识总结
May 23 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 Python
Python 视频画质增强
Apr 28 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
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
joomla数据库操作示例代码
2016/01/06 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
jquery中动态效果小结
2010/12/16 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
python 切片和range()用法说明
2013/03/24 Python
全面分析Python的优点和缺点
2018/02/07 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Django框架模板介绍
2019/01/15 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
C#中的验证控件有几种
2014/03/08 面试题
xxx同志考察材料
2014/02/07 职场文书
小学运动会报道稿
2014/10/04 职场文书
公司停电通知
2015/04/15 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL