1. 程式人生 > 程式設計 >基於PyQT實現區分左鍵雙擊和單擊

基於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,QtWidgets

class myWidgets(QtWidgets.QTableWidget):

  def __init__(self,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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。