美文网首页Python
PyQt区分左键双击和左键单击

PyQt区分左键双击和左键单击

作者: Surpassme | 来源:发表于2020-05-03 20:45 被阅读0次

        在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)
    

    相关文章

      网友评论

        本文标题:PyQt区分左键双击和左键单击

        本文链接:https://www.haomeiwen.com/subject/drmjghtx.html