Пример #1
0
class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.model = Model()

        self.imageLabel = QtGui.QLabel()
        self.imageLabel.setBackgroundRole(QtGui.QPalette.Base)
        self.imageLabel.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Ignored)
        self.imageLabel.setScaledContents(False)
        self.imageLabel.resize(800,600)

        self.scrollArea = ScrollArea()
        self.scrollArea.setBackgroundRole(QtGui.QPalette.Dark)
        self.scrollArea.setWidget(self.imageLabel)
        self.scrollArea.setAlignment(QtCore.Qt.AlignCenter)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.scrollArea)
        self.setLayout(layout)

        self.scrollArea.nextImageSignal.connect(self.nextImage)
        self.scrollArea.prevImageSignal.connect(self.prevImage)
        self.scrollArea.zoomInSignal.connect(self.zoomIn)
        self.scrollArea.zoomOutSignal.connect(self.zoomOut)

    def resizeEvent(self, event):
        self.imageLabel.resize(event.size())
        self.scrollArea.resize(event.size())

    def nextImage(self):
        if self.model.hasNextImage():
            self.displayImage(self.model.getNextImage())
            self.scrollArea.resetNextPageCoordinates()

    def prevImage(self):
        if self.model.hasPrevImage():
            self.displayImage(self.model.getPrevImage())
            self.scrollArea.resetPrevPageCoordinates()

    def zoomIn(self):
        factor = 1.25
        self.displayImage(self.model.zoomImage(factor))

    def zoomOut(self):
        factor = 0.8
        self.displayImage(self.model.zoomImage(factor))

    def adjustScrollBar(self, scrollBar, factor):
        scrollBar.setValue(int(factor * scrollBar.value()
                                + ((factor - 1) * scrollBar.pageStep()/2)))

    @QtCore.Slot(ImageFile)
    def displayImage(self, img):
        if not img:
            return
        
        if img.image.isNull():
            print "Unable to display {}".format(self.model.currentImage)
            return
        
        print "Displaying {}/{}".format(self.model.currentImage, self.model.numberOfImages)
        self.imageLabel.setPixmap(img.pixmap)
        self.imageLabel.resize(img.size)