基于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实现的扫雷游戏实例代码
Aug 01 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
Django基础之Model操作步骤(介绍)
May 27 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
Python图片处理之图片裁剪教程
May 27 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 高级课程笔记 面向对象
2009/06/21 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
PHP操作数组相关函数
2011/02/03 PHP
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
php经典算法集锦
2015/11/14 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python中Genarator函数用法分析
2015/04/08 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
python实现聊天小程序
2018/03/13 Python
Django 连接sql server数据库的方法
2018/06/30 Python
Python input函数使用实例解析
2019/11/22 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
关于python中导入文件到list的问题
2020/10/31 Python
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
方正Java笔试题
2014/07/03 面试题
优秀生推荐信范文
2013/11/28 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
百日宴上的祝酒词
2015/08/10 职场文书