基于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中的WSGI接口
May 11 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
Python smtplib实现发送邮件功能
May 22 Python
python操作redis方法总结
Jun 06 Python
python查看模块安装位置的方法
Oct 16 Python
python把转列表为集合的方法
Jun 28 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 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
php的控制语句
2006/10/09 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
python实现单向链表详解
2018/02/08 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
C语言笔试题
2014/09/04 面试题
一套C#面试题
2013/10/09 面试题
善意的谎言事例
2014/02/15 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
个人授权委托书范文
2014/09/21 职场文书
销售助理岗位职责
2015/02/11 职场文书
单位工资证明范本
2015/06/12 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
Python list列表删除元素的4种方法
2021/11/01 Python
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python