基于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调用cmd命令行制作刷博器
Jan 13 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
python调用摄像头显示图像的实例
Aug 03 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
Python文件路径名的操作方法
Oct 30 Python
Python timer定时器两种常用方法解析
Jan 20 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
python中执行smtplib失败的处理方法
Jul 01 Python
基于Django集成CAS实现流程详解
Nov 28 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
对python的文件内注释 help注释方法
2018/05/23 Python
基于python绘制科赫雪花
2018/06/22 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
J2EE相关知识面试题
2013/08/26 面试题
学雷锋演讲稿汇总
2014/05/10 职场文书
爱护公物标语
2014/06/24 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
销售开票员岗位职责
2015/04/15 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js