基于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服务器拒绝服务攻击代码
Jan 16 Python
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
Python 实现数据库更新脚本的生成方法
Jul 09 Python
Python配置mysql的教程(推荐)
Oct 13 Python
python绘制条形图方法代码详解
Dec 19 Python
使用python实现ANN
Dec 20 Python
python实现比较文件内容异同
Jun 22 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
Python list与NumPy array 区分详解
Nov 06 Python
python学习将数据写入文件并保存方法
Jun 07 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
原生js滑动轮播封装
2020/07/31 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python编写弹球游戏的实现代码
2018/03/12 Python
详解python算法之冒泡排序
2019/03/05 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
小班重阳节活动方案
2014/02/08 职场文书
药剂专业求职信
2014/06/20 职场文书
投标承诺函格式
2015/01/21 职场文书
招商银行工作证明
2015/06/17 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js