基于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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python实现遍历数据库并获取key的值
May 17 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 Python
python实现五子棋小游戏
Mar 25 Python
python如何制作缩略图
Apr 30 Python
python与字符编码问题
May 24 Python
Python 实现自动导入缺失的库
Oct 29 Python
python日期与时间戳的各种转换示例
Feb 12 Python
python实现图像拼接
Mar 05 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
mac下安装nginx和php
2013/11/04 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
python发送邮件接收邮件示例分享
2014/01/21 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python实现随机漫步算法
2018/08/27 Python
Python docx库用法示例分析
2019/02/16 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
如何在 Django 模板中输出 "{{"
2020/01/24 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
库房管理员岗位职责
2014/03/09 职场文书
美术指导助理求职信
2014/04/20 职场文书
期末学生评语大全
2014/04/24 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
董事长致辞
2015/07/29 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js