Как передать в QListWidget коллаж из нескольких картинок?

Есть несколько URL адресов картинок ( 1 , 2 , 3 , 4 и 5 картинка) Адреса беру из Базы Данных SQL , каждая строка - 5 адресов .

Как можно собрать все эти изображения в 1 объект , чтобы после передать этот объект qlistwidget?

Какие есть способы? Проще говоря я хочу , чтобы QListWidget добавлял как бы уже сгенерированный коллаж как 1 картинку , в которой есть ещё 4 внутри.

Может можно как-то собрать 1 готовый объект из 6 Qlabel? ( 4 маленьких справа , 1 большой и 1 на котором будут держаться все 5 qlabel) , а после передать этот объект qlistwidget ?

Прикрепляю картинку. qlistwidget


Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import sys
import requests
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.Qt import *


class Widget(QWidget):
    def __init__(self, urls):
        super().__init__()

        self.grid = QGridLayout(self)

        for i, url in enumerate(urls):
            lbl = QLabel()
            image = QImage()
            image.loadFromData(requests.get(url).content) 
            if i == 0:
                lbl.setPixmap(QPixmap(image).scaled(210, 210)) 
                self.grid.addWidget(lbl, i+1, 0, 4, 1)
            else:
                lbl.setPixmap(QPixmap(image).scaled(70, 70)) 
                self.grid.addWidget(lbl, i, 1, 1, 1)        


class ListWidget(QListWidget):
    def __init__(self, *args, **kwargs):
        super(ListWidget, self).__init__(*args, **kwargs)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setEditTriggers(self.NoEditTriggers)
        self.setFlow(self.LeftToRight)
        self.setWrapping(True)
        self.setResizeMode(self.Adjust)
        self.setSpacing(10)
        # Резиновая лента (для эффекта выбора рамки)
        self._rubberPos  = None
        self._rubberBand = QRubberBand(QRubberBand.Rectangle, self)

    def makeItem(self, lb):
        item = QtWidgets.QListWidgetItem(self)
        item.setSizeHint(QtCore.QSize(300, 300))
        self.setItemWidget(item, lb)


class MyWindow(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('ListWidget')
        self.resize(1100, 670)
        self.show()        
        
        self.listWidget = ListWidget()

        box = QtWidgets.QVBoxLayout(self)
        box.addWidget(self.listWidget)

        self.urls = [
            "https://img.icons8.com/ios/452/phone.png",
            "https://img.icons8.com/ios/452/phone.png", 
            "http://www.google.com/favicon.ico",
            "https://www.imgonline.com.ua/examples/random-pixels-wallpaper-big.jpg",
            "https://laguna-akul.ru/upload/003/u379/f4/61/8f68d93a.jpg",
        ]
        
        num = 5                                                
        for i in range(num):
            art = Widget(self.urls)            
            self.listWidget.makeItem(art)        
            QApplication.processEvents() 
        

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MyWindow()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка