Как передать в QListWidget коллаж из нескольких картинок?
Есть несколько URL адресов картинок ( 1 , 2 , 3 , 4 и 5 картинка)
Адреса беру из Базы Данных SQL , каждая строка - 5 адресов .
Как можно собрать все эти изображения в 1 объект , чтобы после передать этот объект qlistwidget?
Какие есть способы? Проще говоря я хочу , чтобы QListWidget добавлял как бы уже сгенерированный коллаж как 1 картинку , в которой есть ещё 4 внутри.
Может можно как-то собрать 1 готовый объект из 6 Qlabel? ( 4 маленьких справа , 1 большой и 1 на котором будут держаться все 5 qlabel) , а после передать этот объект 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_())

