PyQT區分左鍵雙擊和左鍵單擊


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM