Search code examples
pythonwidgetpysideqpixmap

How to load a contact sheet of images with PySide?


The code below loads one image. I wish to load an unknown number of images which resides in a folder and I wish them to show up in a contact sheet kind of manner.

How can I modify the code below so that it will take a list of images and show them side by side?

import sys
from PySide import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        hbox = QtGui.QHBoxLayout(self)
        pixmap = QtGui.QPixmap("myImage.jpg")

        lbl = QtGui.QLabel(self)
        lbl.setPixmap(pixmap)

        hbox.addWidget(lbl)
        self.setLayout(hbox)

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Image viewer')
        self.show()        

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Solution

  • this might the overall thing that you want including the scrollbars..

    import os
    import sys
    from PySide import QtGui, QtCore
    
    class Example(QtGui.QWidget):
    
        def __init__(self):
            super(Example, self).__init__()
            self.initUI()
    
        def initUI(self):
            self.img_fold = r"C:\Users\abhishek.garg\Desktop\New folder"
    
            self.widget_layout = QtGui.QVBoxLayout(self)
            self.scrollarea = QtGui.QScrollArea()
            self.scrollarea.setWidgetResizable(True)
            self.widget_layout.addWidget(self.scrollarea)
            self.widget = QtGui.QWidget()
            self.layout = QtGui.QVBoxLayout(self.widget)
            self.scrollarea.setWidget(self.widget)
    
            self.layout.setAlignment(QtCore.Qt.AlignHCenter)
    
            for img in os.listdir(self.img_fold):
                img_path = os.path.join(self.img_fold, img)
    
                pixmap = QtGui.QPixmap(img_path)
                lbl = QtGui.QLabel(self)
                lbl.setPixmap(pixmap)
    
                self.layout.addWidget(lbl)
    
    
            self.setGeometry(300, 300, 280, 170)
            self.setWindowTitle('Image viewer')
            self.show()
    
    def main():
    
        app = QtGui.QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    
    
    if __name__ == '__main__':
        main()