基于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读写Excel文件的实例
Nov 01 Python
用python代码做configure文件
Jul 20 Python
Python 基础知识之字符串处理
Jan 06 Python
python WindowsError的错误代码详解
Jul 23 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
python实现简易动态时钟
Nov 19 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
Python pathlib模块使用方法及实例解析
Oct 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
再说下636单管机
2021/03/02 无线电
linux php mysql数据库备份实现代码
2009/03/10 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
python字符串,数值计算
2016/10/05 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
Python内置函数及功能简介汇总
2020/10/13 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
师德师风承诺书
2014/05/23 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL