def makeEv(delta): return QWheelEvent( QPointF(10, 10), QPointF(webEngineView.mapToGlobal(QPoint(10, 10))), QPoint(0, 0), QPoint(0, delta), delta, Qt.Horizontal, Qt.NoButton, Qt.ControlModifier)
def wheelEvent(self, event): """Handle zoom on wheel rotation.""" if event.modifiers() & Qt.ControlModifier: degrees = event.angleDelta() / 8 steps = degrees.y() / 15 self.setTransformationAnchor(self.AnchorUnderMouse) if steps > 0: if self.zoom < self.max_zoom: self.scale(self.zoom_factor, self.zoom_factor) self.zoom = self.zoom * self.zoom_factor elif steps < 0: if self.zoom > self.min_zoom: self.scale(1 / self.zoom_factor, 1 / self.zoom_factor) self.zoom = self.zoom / self.zoom_factor event.setAccepted(True) if event.modifiers() & Qt.ShiftModifier: angle_delta = QPoint(event.angleDelta().y(), event.angleDelta().x()) pixel_delta = QPoint(event.pixelDelta().y(), event.pixelDelta().x()) modifiers = event.modifiers() & ~Qt.ShiftModifier new_event = QWheelEvent(event.posF(), event.globalPosF(), pixel_delta, angle_delta, event.buttons(), modifiers, event.phase(), event.inverted(), event.source()) event = new_event super(GBaseModelView, self).wheelEvent(event)
def __smoothMove(self): """ 计时器溢出时进行平滑滚动 """ totalDelta = 0 # 计算所有未处理完事件的滚动距离,定时器每溢出一次就将步数-1 for i in self.stepsLeftQueue: totalDelta += self.__subDelta(i[0], i[1]) i[1] -= 1 # 如果事件已处理完,就将其移出队列 while self.stepsLeftQueue and self.stepsLeftQueue[0][1] == 0: self.stepsLeftQueue.popleft() # 构造滚轮事件 e = QWheelEvent(self.lastWheelEvent.pos(), self.lastWheelEvent.globalPos(), self.lastWheelEvent.pos(), self.lastWheelEvent.globalPos(), round(totalDelta), Qt.Vertical, self.lastWheelEvent.buttons(), Qt.NoModifier) """ e = QWheelEvent(self.lastWheelEvent.pos(), self.lastWheelEvent.globalPos(), QPoint(), self.lastWheelEvent.angleDelta(), round(totalDelta), Qt.Vertical, self.lastWheelEvent.buttons(), Qt.NoModifier) """ # 将构造出来的滚轮事件发送给app处理 QApplication.sendEvent(self.verticalScrollBar(), e) # 如果队列已空,停止滚动 if not self.stepsLeftQueue: self.smoothMoveTimer.stop()
def wheelEvent(self, e: QWheelEvent): """ 实现平滑滚动效果 """ if self.smoothMode == SmoothMode.NO_SMOOTH: super().wheelEvent(e) return # 将当前时间点插入队尾 now = QDateTime.currentDateTime().toMSecsSinceEpoch() self.scrollStamps.append(now) while now - self.scrollStamps[0] > 500: self.scrollStamps.popleft() # 根据未处理完的事件调整移动速率增益 accerationRatio = min(len(self.scrollStamps) / 15, 1) if not self.lastWheelEvent: self.lastWheelEvent = QWheelEvent(e) else: self.lastWheelEvent = e # 计算步数 self.stepsTotal = self.fps * self.duration / 1000 # 计算每一个事件对应的移动距离 delta = e.angleDelta().y() * self.stepRatio if self.acceleration > 0: delta += delta * self.acceleration * accerationRatio # 将移动距离和步数组成列表,插入队列等待处理 self.stepsLeftQueue.append([delta, self.stepsTotal]) # 定时器的溢出时间t=1000ms/帧数 self.smoothMoveTimer.start(1000 / self.fps)
def wheelEvent(self, event): if self.control_scheme.wheel_zooms: dy = event.angleDelta().y() # Filter out horizontal wheel motion. We don't support this yet. if dy == 0: event.ignore() return self.zoom_camera(dy) else: if event.modifiers() & Qt.ShiftModifier: event = QWheelEvent(event.posF(), event.globalPosF(), event.pixelDelta(), event.angleDelta(), # Value magically chosen to approximate # what is happening on nirvana using # a steelseries mouse... event.angleDelta().y() / 8, Qt.Horizontal, # Qt4 crap event.buttons(), event.modifiers(), event.phase()) super().wheelEvent(event)
def set_one_zoom_out(self): # zoom out once. fake_wheel_event = QWheelEvent(QPoint(0, 0), QPoint(0, 0), QPoint(0, -2), QPoint(0, -120), 0, Qt.Vertical, Qt.LeftButton, Qt.KeyboardModifierMask) self.has_pressed_zoom_btn = True self.wheelEvent(fake_wheel_event)
def _emit_wheel_event(self): ev = QWheelEvent(*self._saved_wheel_event_info) if ev.delta() >= 0: self._Iren.MouseWheelForwardEvent() else: self._Iren.MouseWheelBackwardEvent() self.wheel_timer.stop() self.__wheelDelta = 0
def eventFilter(self, watched: QtCore.QObject, event: QtCore.QEvent) -> bool: if event.type() == QtCore.QEvent.Wheel: scroll = QScrollArea(watched) wheel = QWheelEvent(event) scrollbar = scroll.horizontalScrollBar() scrollbar.setValue(int(scrollbar.value() - wheel.angleDelta().y() / 5)) return True return super(TTScroller, self).eventFilter(watched, event)
def mouseWheel(widget, pos=QPoint(), delta=QPoint(10, 10), inverted=False, source=Qt.MouseEventNotSynthesized): event = QWheelEvent(pos, widget.mapToGlobal(pos), delta, delta, Qt.NoButton, Qt.NoModifier, Qt.NoScrollPhase, source) qapp.sendEvent(widget, event)
def eventFilter(self, object, event): if (event.type() == QEvent.Wheel and not self.__d_ignoreWheelEvent): we = QWheelEvent(event) pos = self.wheelRect().center() wheelEvent = QWheelEvent(pos, QWidget.mapToGlobal(self, pos), we.pixelDelta(), we.angleDelta(), we.buttons(), we.modifiers(), we.phase(), we.inverted(), we.source()) self.__d_ignoreWheelEvent = True QApplication.sendEvent(self, wheelEvent) self.__d_ignoreWheelEvent = False return True return Qwt.QwtWheel.eventFilter(object, event)
def set_one_zoom_in(self): # zoom in once. fake_wheel_event = QWheelEvent( QPoint(0, 0), # pos(fake) QPoint(0, 0), # global-pos(fake) QPoint(0, 2), # pixel-delta(fake) QPoint(0, 120), # angle-delta(fake) 0, # phase Qt.Vertical, # orientation Qt.LeftButton, # button Qt.KeyboardModifierMask # keyboard ) # enable wheel, disable it after using. self.has_pressed_zoom_btn = True # feed it to wheel. self.wheelEvent(fake_wheel_event)
def mouse_wheel_scroll(widget, pos=None, delta=50): """Simulates mouse wheel scroll :param widget: widget to scroll on :type widget: QtWidgets.QWidget :param pos: position of the mouse cursor relative to the widget :type pos: QtCore.QPoint :param delta: relative amount that the wheel was rotated :type delta: int """ if pos is None: pos = widget.rect().center() event = QWheelEvent(pos, widget.mapToGlobal(pos), QPoint(), QPoint(0, delta), delta, Qt.Vertical, Qt.NoButton, Qt.NoModifier) APP.sendEvent(widget, event)
def wheelEvent(self, event): if event.modifiers() == Qt.ShiftModifier: pixelDelta = event.pixelDelta() angleDelta = event.angleDelta() if angleDelta.x() == 0 and angleDelta.y() != 0: delta = angleDelta.y() orientation = Qt.Horizontal else: delta = angleDelta.x() orientation = Qt.Vertical super().wheelEvent( QWheelEvent(event.pos(), event.globalPos(), QPoint(pixelDelta.y(), pixelDelta.x()), QPoint(angleDelta.y(), angleDelta.x()), delta, orientation, event.buttons(), Qt.NoModifier)) else: super().wheelEvent(event)
def qWheelScroll( widget: QWidget, buttons=Qt.NoButton, modifiers=Qt.NoModifier, pos=QPoint(), angleDelta=QPoint(0, 1), ): if pos.isNull(): pos = widget.rect().center() globalPos = widget.mapToGlobal(pos) if angleDelta.y() >= angleDelta.x(): qt4orient = Qt.Vertical qt4delta = angleDelta.y() else: qt4orient = Qt.Horizontal qt4delta = angleDelta.x() event = QWheelEvent(QPointF(pos), QPointF(globalPos), QPoint(), angleDelta, qt4delta, qt4orient, buttons, modifiers) QApplication.sendEvent(widget, event)
def wheelEvent(self, event): e = QWheelEvent(event) QCoreApplication.postEvent(self.customPlot, e)