基于PyQT实现区分左键双击和单击
在PyQt中没有直接提供左键双击的判断方法,需要自己实现,其思路主要如下所示:
1、起动一个定时器,判断在指定的时间之内,点击次数超过2次,则视为双击(其主要思路判断两次点击的时间差在预测的条件以内)
2、起动一个定时器,判断在指定的时间之内,点击次数超过2次,另外再获取鼠标点击的坐标,如果前后两次点击的坐标位置,属于同一个位置,满足这两个条件则判断为双击(其主要思路判断两次点击的时间差在预测的条件以内,且点击的坐标在预设的坐标之内,允许存在一定的偏差)
fromPyQt5.QtCoreimportQTimer fromPyQt5importQtCore,QtGui,QtWidgets classmyWidgets(QtWidgets.QTableWidget): def__init__(self,parent=None): super(myWidgets,self).__init__(parent) self.isDoubleClick=False self.mouse="" defmousePressEvent(self,e): #左键按下 ife.buttons()==QtCore.Qt.LeftButton: QTimer.singleShot(0,lambda:self.judgeClick(e)) #右键按下 elife.buttons()==QtCore.Qt.RightButton: self.mouse="右" #中键按下 elife.buttons()==QtCore.Qt.MidButton: self.mouse='中' #左右键同时按下 elife.buttons()==QtCore.Qt.LeftButton|QtCore.Qt.RightButton: self.mouse='左右' #左中键同时按下 elife.buttons()==QtCore.Qt.LeftButton|QtCore.Qt.MidButton: self.mouse='左中' #右中键同时按下 elife.buttons()==QtCore.Qt.MidButton|QtCore.Qt.RightButton: self.mouse='右中' #左中右键同时按下 elife.buttons()==QtCore.Qt.LeftButton|QtCore.Qt.MidButton|QtCore.Qt.RightButton: self.mouse='左中右' defmouseDoubleClickEvent(self,e): #双击 self.mouse="双击" self.isDoubleClick=True defjudgeClick(self,e): ifself.isDoubleClick==False: self.mouse="左" else: self.isDoubleClick=False self.mouse="双击"
或
fromPyQt5.QtCoreimportQTimer fromPyQt5importQtCore,QtGui,QtWidgets classmyWidgets(QtWidgets.QTableWidget): def__init__(self,parent=None): super(myWidgets,self).__init__(parent) self.mouse="" self.timer=QTimer(self) self.timer.timeout.connect(self.singleClicked) defsingleClicked(self): ifself.timer.isActive(): self.timer.stop() self.mouse="左" defmouseDoubleClickEvent(self,e): ifself.timer.isActive()ande.buttons()==QtCore.Qt.LeftButton: self.timer.stop() self.mouse="双击" super(myWidgets,self).mouseDoubleClickEvent(e) defmousePressEvent(self,e): ife.buttons()==QtCore.Qt.LeftButton: self.timer.start(1000) elife.buttons()==QtCore.Qt.RightButton: self.mouse="右" super(myWidgets,self).mousePressEvent(e)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。