Esempio n. 1
0
 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)
Esempio n. 2
0
    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)
Esempio n. 3
0
 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()
Esempio n. 4
0
 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)
Esempio n. 5
0
    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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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
Esempio n. 8
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)
Esempio n. 9
0
 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)
Esempio n. 10
0
    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)
Esempio n. 11
0
 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)
Esempio n. 12
0
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)
Esempio n. 13
0
    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)
Esempio n. 14
0
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)
Esempio n. 15
0
 def wheelEvent(self, event):
     e = QWheelEvent(event)
     QCoreApplication.postEvent(self.customPlot, e)