2017-05-30 34 views
1

所以,到目前爲止,我有這樣的代碼:如何將QGraphicsView縮放恢復至100%,即程序啓動時的縮放比例?

from PyQt4 import QtGui, QtCore 

class MyFrame(QtGui.QGraphicsView): 
    """ 
     Python PyQt: How can I move my widgets on the window with mouse? 
     https://stackoverflow.com/questions/12213391/python-pyqt-how-can-i-move-my-widgets-on-the-window-with-mouse 
    """ 
    def __init__(self, parent = None): 
     super(MyFrame, self).__init__(parent) 

     scene = QtGui.QGraphicsScene() 
     self.setScene(scene) 
     self.resize(400, 340) 

     # http://pyqt.sourceforge.net/Docs/PyQt4/qpen.html 
     pencil = QtGui.QPen(QtCore.Qt.black, 1) 
     pencil.setStyle(QtCore.Qt.SolidLine) 

     scene.addLine(QtCore.QLineF(0, -50, 0, 50), pencil) 
     scene.addLine(QtCore.QLineF(-50, 0, 50, 0), pencil) 

     fitInViewButton = QtGui.QPushButton('Fit In View', self) 
     fitInViewButton.clicked.connect(self.handleFitInView) 

     scene.addWidget(fitInViewButton) 

    def handleFitInView(self): 
     # Auto scale a QGraphicsView 
     # http://www.qtcentre.org/threads/42917-Auto-scale-a-QGraphicsView 
     self.ensureVisible (self.scene().itemsBoundingRect()) 
     self.fitInView(self.scene().itemsBoundingRect(), QtCore.Qt.KeepAspectRatio) 

    def wheelEvent(self, event): 
     """ 
      PyQT4 WheelEvent? how to detect if the wheel have been use? 
      https://stackoverflow.com/questions/9475772/pyqt4-wheelevent-how-to-detect-if-the-wheel-have-been-use 

      QGraphicsView Zooming in and out under mouse position using mouse wheel 
      https://stackoverflow.com/questions/19113532/qgraphicsview-zooming-in-and-out-under-mouse-position-using-mouse-wheel 
     """ 

     # Zoom Factor 
     zoomInFactor = 1.1 
     zoomOutFactor = 1/zoomInFactor 

     # Set Anchors 
     self.setTransformationAnchor(QtGui.QGraphicsView.NoAnchor) 
     self.setResizeAnchor(QtGui.QGraphicsView.NoAnchor) 

     # Save the scene pos 
     oldPos = self.mapToScene(event.pos()) 

     # Zoom 
     if event.delta() > 0: 
      zoomFactor = zoomInFactor 
     else: 
      zoomFactor = zoomOutFactor 
     self.scale(zoomFactor, zoomFactor) 

     # Get the new position 
     newPos = self.mapToScene(event.pos()) 

     # Move scene to old position 
     delta = newPos - oldPos 
     self.translate(delta.x(), delta.y()) 

if (__name__ == '__main__'): 
    app = QtGui.QApplication([]) 
    f = MyFrame() 
    f.show() 
    app.exec_() 

它產生這個窗口最初打開,如:

enter image description here

不過後者我可以放大,如:

enter image description here

然後,我想有一個重置縮放按鈕,將縮放設置爲默認縮放時,該程序打開:

enter image description here

但按鈕我有現在只擬合可見部分的全屏幕,而不是恢復原來的縮放,鼠標縮放滾動後:

enter image description here

回答

1

重置索引則必須重新改造:

{your_graphicsview}.setTransform(QtGui.QTransform())