基于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中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
python在Windows8下获取本机ip地址的方法
Mar 14 Python
Python获取linux主机ip的简单实现方法
Apr 18 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
Mar 16 Python
Python中格式化format()方法详解
Apr 01 Python
Python实现的桶排序算法示例
Nov 29 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python如何通过twisted搭建socket服务
Feb 03 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
python实现数字炸弹游戏程序
Jul 17 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 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
1.PHP简介
2006/10/09 PHP
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
当前流行的JavaScript代码风格指南
2014/09/10 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
python实现画一颗树和一片森林
2018/06/25 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
python3.5安装python3-tk详解
2019/04/26 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
妇科医生自荐信
2013/11/05 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS