Как задать размеры svg изображения в setCellWidget QTableWidget?
Сгенерировал штрих-код в формате .svg через библиотеку python-barcode.
С помощью класса QSvgWidget отобразил .svg.
def generation_barcode_svg(self, value):
file = barcode.get('code128', value)
file_svg = file.save('barcode_in_header')
svgWidget = QSvgWidget('barcode_in_header.svg')
return svgWidget
С помощью метода setCellWidget отобразил файл .svg в ячейке таблицы QTableWidget.
self.table.setCellWidget(6, 1, self.generation_barcode_svg(self.data_product_bar_code))
Теперь хочу задать размеры файлу .svg, чтобы он "растянулся" по всей площади ячейки.
Подскажите, пожалуйста, как это можно сделать?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
ImageWriter Renders штрих -коды как изображение. Поддерживает все форматы изображений, поддерживаемые Pillow. Defaults to PNG.
Класс QStyleDiteMDelegate предоставляет средства отображения и редактирования для элементов данных из модели.
import sys
import barcode
from barcode.writer import ImageWriter
from PyQt5 import QtGui, QtWidgets
# !!! +++ vvvvvvvvvvvvvvvvvvv
class IconDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super(IconDelegate, self).initStyleOption(option, index)
option.decorationSize = option.rect.size()
# !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.data_product_bar_code = '123456789012'
self.tableWidget = QtWidgets.QTableWidget(5, 3)
self.tableWidget.verticalHeader().setDefaultSectionSize(70) #+
self.tableWidget.horizontalHeader().setDefaultSectionSize(150) #+
delegate = IconDelegate(self.tableWidget) # +++
self.tableWidget.setItemDelegateForColumn(2, delegate) # +++
# + vvv
file_png = self.generation_barcode_svg(
self.data_product_bar_code)
item = QtWidgets.QTableWidgetItem(
QtGui.QIcon(file_png), "")
# !!! +++ ^^^^^^^^^^^^^^^^^^^^^
self.tableWidget.setItem(1, 2, item)
layout = QtWidgets.QVBoxLayout(self.centralWidget)
layout.addWidget(self.tableWidget)
def generation_barcode_svg(self, value):
# Common Writer Options https://pythonhosted.org/pyBarcode/writers/index.html
render_options = {
"module_width": 0.35,
"module_height": 10,
"font_size": 18,
"text_distance": 1,
"quiet_zone": 3.1,
}
#- file = barcode.get('code128', value)
file = barcode.get(
"code128",
value,
writer=ImageWriter()) #https://python-barcode.readthedocs.io/en/stable/writers.html?highlight=writer#imagewriter
# !!! +++ ^^^^^^^^^^^^^^^^^^^^
file_png = file.save('barcode_in_header', render_options)
# !!! +++ ^^^^^^^^^^^^^^
print(f'\nfile_png = {file_png};\n\n') #
return file_png
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.resize(700, 500)
w.show()
sys.exit(app.exec_())

