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)