基于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中的正则表达式
Apr 28 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
python pygame模块编写飞机大战
Nov 20 Python
Python语言快速上手学习方法
Dec 14 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
kafka-python 获取topic lag值方式
Dec 23 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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
Zend Framework页面缓存实例
2014/06/25 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
python uuid模块使用实例
2015/04/08 Python
python3简单实现微信爬虫
2015/04/09 Python
Python 查看文件的编码格式方法
2017/12/21 Python
在python中实现对list求和及求积
2018/11/14 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python SVD压缩图像的实现代码
2019/11/05 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
婚庆公司的创业计划书
2014/01/22 职场文书
药学职务聘任书
2014/03/29 职场文书
租房协议书怎么写
2014/04/10 职场文书
校园文明标语
2014/06/13 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
python删除csv文件的行列
2021/04/06 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL