900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > pyQt5中单击 双击 拖动事件区分

pyQt5中单击 双击 拖动事件区分

时间:2020-01-09 16:08:31

相关推荐

pyQt5中单击 双击 拖动事件区分

一般在处理单击、双击、拖动事件时会遇到以下问题:

双击时会产生两个额外的单击事件和两个释放事件拖动时会在拖动开始处产生一个单击事件,在拖动结束时产生一个释放事件

故采用signal作为事件类型的标志加以区分。此处采用释放时生效单击事件。

用定时器等待双击事件,在时间内如果没有判断得到双击事件即为单击事件

# 实例化功能按钮class button1(QPushButton):def __init__(self, parent=None):super(button1, self).__init__(parent)self.setText("记事本")self.resize(100, 100)self.signal1 = 0 # 判断鼠标事件类型的标志self.mousepos1 = 0# 用于拖动时的鼠标位置初始值self.timer = QTimer()self.timer.timeout.connect(self.timerout1)# 定时器,初始化连接到timerout1函数# 定义鼠标事件def mouseDoubleClickEvent(self, QMouseEvent):self.signal = 2self.close()def mouseMoveEvent(self, QMouseEvent):# 定义窗口随鼠标移动方法1if QMouseEvent.buttons() == Qt.LeftButton:self.mousepos2 = QMouseEvent.screenPos()self.toposx = int(self.frameGeometry().x() + self.mousepos2.x() - self.mousepos1.x())self.toposy = int(self.frameGeometry().y() + self.mousepos2.y() - self.mousepos1.y())self.move(self.toposx, self.toposy)self.mousepos1 = self.mousepos2self.signal1 = 3def mousePressEvent(self, QMouseEvent):if QMouseEvent.buttons() == Qt.LeftButton:self.mousepos1 = QMouseEvent.screenPos()# 采用按钮释放时相应点击事件def mouseReleaseEvent(self, e: QtGui.QMouseEvent) -> None:if self.signal1 == 0:self.timer.start(1000)self.signal1 = 1elif self.signal1 == 3: # 拖动事件标志self.signal1 = 0# 定时器功能函数def timerout1(self):if self.signal1 == 1:self.remember() # 单击事件处理函数self.signal1 = 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。