Exemple #1
0
    def __init__(self, scene):
        super(ScalingView, self).__init__(scene)

        #from PyQt4 import QtOpenGL
        #self.opengl = QtOpenGL.QGLWidget(QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
        #self.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
        #self.setViewport(self.opengl)

        #this would work if scene used a bitmap for background brush
        #self.setCacheMode(self.CacheBackground)

        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.scaler = ScaleAnimation(self)
        self.scaler.finished.connect(self.scale_finished)
        self.scroller = ViewScrollAnimation(self)
        self.scroller.finished.connect(self.scroll_finished)

        self.viewport_changed.connect(scene.widget._onViewportChanged)
        self.scale_changed.connect(scene.widget._onViewScaleChanged)
        self.scale_started.connect(scene._onViewScaleStarted)
        self.scale_finished.connect(scene._onViewScaleFinished)
        self.scroll_started.connect(scene._onViewScrollStarted)
        self.scroll_finished.connect(scene._onViewScrollFinished)
        self.horizontalScrollBar().valueChanged.connect(self._onValueChanged)
        self.verticalScrollBar().valueChanged.connect(self._onValueChanged)
Exemple #2
0
class ScalingView(QtGui.QGraphicsView):

    scale_changed  = QtCore.pyqtSignal(float)
    scale_started = QtCore.pyqtSignal()
    scale_finished = QtCore.pyqtSignal()
    scroll_started = QtCore.pyqtSignal()
    scroll_finished = QtCore.pyqtSignal()
    viewport_changed  = QtCore.pyqtSignal(QtCore.QRectF, float)

    def __init__(self, scene):
        super(ScalingView, self).__init__(scene)

        #from PyQt4 import QtOpenGL
        #self.opengl = QtOpenGL.QGLWidget(QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))
        #self.setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
        #self.setViewport(self.opengl)

        #this would work if scene used a bitmap for background brush
        #self.setCacheMode(self.CacheBackground)

        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.scaler = ScaleAnimation(self)
        self.scaler.finished.connect(self.scale_finished)
        self.scroller = ViewScrollAnimation(self)
        self.scroller.finished.connect(self.scroll_finished)

        self.viewport_changed.connect(scene.widget._onViewportChanged)
        self.scale_changed.connect(scene.widget._onViewScaleChanged)
        self.scale_started.connect(scene._onViewScaleStarted)
        self.scale_finished.connect(scene._onViewScaleFinished)
        self.scroll_started.connect(scene._onViewScrollStarted)
        self.scroll_finished.connect(scene._onViewScrollFinished)
        self.horizontalScrollBar().valueChanged.connect(self._onValueChanged)
        self.verticalScrollBar().valueChanged.connect(self._onValueChanged)

    def _onValueChanged(self, value):

        rect = self.viewport().geometry()
        new = self.mapToScene(rect).boundingRect()
        self.viewport_changed.emit(new, self.getScale())

    def getScale(self):
        t = self.transform()
        sx, sy = t.m11(), t.m22()
        if sx != sy:
            raise ValueError('Aspect Ratio Corrupt')
        return sx
    def setScale(self, factor):
        t = QtGui.QTransform.fromScale(1, 1)
        t.scale(factor, factor)
        self.setTransform(t)
        self.scale_changed.emit(factor)

    scale = QtCore.pyqtProperty('float', getScale, setScale)

    def getHpos(self): return self.horizontalScrollBar().value()
    def setHpos(self, value): return self.horizontalScrollBar().setValue(value)
    hpos = QtCore.pyqtProperty('int', getHpos, setHpos)

    def getVpos(self): return self.verticalScrollBar().value()
    def setVpos(self, value): return self.verticalScrollBar().setValue(value)
    vpos = QtCore.pyqtProperty('int', getVpos, setVpos)

    def zoom(self, scale):
        self.scale_started.emit()
        self.scaler.scaleTo(scale)

    def scroll(self, direction):
        self.scroller.scroll(direction)