Получение изображения из MySQL в tableWidget в PyQt5

Мне удалось получить данные из базы данных и заполнить tableWidget, но столбец изображения не отображается. Я попробовал код, который нашел в Интернете, и все же он не сработал. Столбец изображения в базе данных имеет тип данных BLOB. Пожалуйста, помогите исправить мой следующий код. Или вы можете посоветовать и порекомендовать другой метод, отличный от tableWidget.

 def getPersData(self):
    con = MySQLdb.connect(host="localhost", user="root", password="", database="db")
    with con:
        cur = con.cursor()
        query = cur.execute("SELECT * FROM persons")

        rows = cur.fetchall()

    for row_number, row_data in enumerate(rows):
        self.ui.tableWidget.insertRow(row_number)
        for column_number, column_data in enumerate(row_data):
            if column_number == 1:
                item = self.getImg(column_data)
                self.ui.tableWidget.setCellWidget(row_number, column_number, item)
            else:
                self.ui.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(column_data)))
    self.ui.tableWidget.verticalHeader().setDefaultSectionSize(100)
    self.ui.tableWidget.show()


def getImg(self, img):
    img_label = self.ui.label
    img_label.setText("")
    img_label.setScaledContents(True)
    pixmap = QPixmap()
    pixmap.loadFromData(img, "PNG")
    img_label.setPixmap(pixmap)
    return img_label

person YoungE    schedule 24.09.2020    source источник


Ответы (1)


Логика использования байтов (в моем предыдущем ответе я предложил использовать base64, поэтому я использую его и в этом случае) для создания QPixmap, который можно преобразовать в QIcon, который можно отобразить в QTableWidget:

for row_number, row_data in enumerate(rows):
    self.ui.tableWidget.insertRow(row_number)
    for column_number, column_data in enumerate(row_data):
        it = QTableWidgetItem()
        if column_number == 1:
            pixmap = QPixmap()
            pixmap.loadFromData(QByteArray.fromBase64(row_data))
            icon = QIcon(pixmap)
            it.setIcon(icon)
        else:
            it.setText(row_data)
        self.ui.tableWidget.setItem(row_number, column_number, it)
person eyllanesc    schedule 24.09.2020