Всем привет! Python 3.8, PyQT5, Windows. Я создаю в цикле ряд карточек товаров. Каждая карточка это блок строк QVBoxLayout в том числе картинка, артикул, краткое описание, цена, кнопка, потом каждый блок помещается в ячейку QGridLayout. Помогите пожалуйста оформить визально. Надо сделать что бы размер картинки был строго определенный, например 150 на 150 пикселов, Размер карточек, покрайней мере в рамках одной строки был одинаковый, из-за разного размера текстовой части описания плавает размер картинки и очень бы хотелось каждый блок визально отделить от другого, например обвести рамкой, если возможно со скругленными краями и в идеале небольшой тенью. Принтскрин как это сейчас и код ниже. Заранее всем спасибо.


Python:
class PriceContainer(QWidget, QtGui.QImage, QtCore.QSize):
def __init__(self, text):
super(PriceContainer, self).__init__()
global price_light_g
self.grid_price = QtWidgets.QGridLayout()
self.setLayout(self.grid_price)
self.row_count = 0
self.cell_count = 0
for key in sorted(price_light_g.keys()):
self.vbox_price = QtWidgets.QVBoxLayout()
self.vbox_price.setSpacing(0)
self.vbox_price.setContentsMargins(0, 0, 0, 0)
self.str_1 = "import\images\\"
self.str_2 = price_light_g[key][5]
self.model_image_path = self.str_1 + self.str_2
self.image_model = QtWidgets.QLabel(self)
if os.path.exists(self.model_image_path):
self.pixmap = QtGui.QPixmap(self.model_image_path)
else:
self.file_url_str = "https://www.site.ru/light_designer/directory/images/" + self.str_2
self.file_local_str = "import\images" + "\\" + self.str_2
self.g = requests.get(self.file_url_str)
if self.g.status_code == 200:
f = open(self.file_local_str,'wb')
f.write(self.g.content)
f.close()
self.pixmap = QtGui.QPixmap(self.model_image_path)
else:
self.pixmap = QtGui.QPixmap(r"import\images\nofoto.png")
self.image_model.setPixmap(self.pixmap)
self.artikul_model = QtWidgets.QLabel("Артикул: " + key)
self.desc_model = QtWidgets.QLabel(price_light_g[key][3])
self.desc_model.setWordWrap(True)
self.opt_model = QtWidgets.QLabel("Цена ОПТ: " + price_light_g[key][0])
self.rrc_model = QtWidgets.QLabel("Цена РРЦ: " + price_light_g[key][1])
self.zakaz_button = QtWidgets.QPushButton("Добавить в заказ")
self.button_name = "zakaz_button_" + key
self.zakaz_button.setObjectName(self.button_name)
self.vbox_price.addWidget(self.image_model)
self.vbox_price.addWidget(self.artikul_model)
self.vbox_price.addWidget(self.desc_model)
self.vbox_price.addWidget(self.opt_model)
self.vbox_price.addWidget(self.rrc_model)
self.vbox_price.addWidget(self.zakaz_button)
self.zakaz_button.clicked.connect(partial(self.zakaz_dialog_add, key, self.button_name))
self.grid_price.addLayout(self.vbox_price, self.row_count, self.cell_count)
if self.cell_count == 0:
self.cell_count = self.cell_count + 1
else:
self.cell_count = self.cell_count - 1
self.row_count = self.row_count + 1