01
Апр
2021

Как вывести изображение форматом blob в QLabel из бд sqlite3?

Суть в том, что мне нужно из БД вывести изображение на месте HELLO, т.е в QLabel, пытаюсь вывести следующим образом -

sqlite_blob_query = """SELECT photo FROM Album WHERE id = 1"""
cursor.execute(sqlite_blob_query)
record1 = cursor.fetchone()[0]

# pix = QPixmap()
# pix.loadFromData(record1.data())
# self.label.setPixmap(pix)

self.label.setText(_translate("Form", record1))

Выглядит это так:

Рис 1


main.py:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import QHeaderView
from PyQt5.QtGui import QPixmap
import sqlite3
import sys

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(723, 384)
        Form.setMinimumSize(QtCore.QSize(723, 384))
        Form.setMaximumSize(QtCore.QSize(723, 384))
        self.tabWidget = QtWidgets.QTabWidget(Form)
        self.tabWidget.setGeometry(QtCore.QRect(0, 0, 731, 391))
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.tableWidget = QtWidgets.QTableWidget(self.tab)
        self.tableWidget.setGeometry(QtCore.QRect(10, 150, 701, 111))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(10)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(7, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(8, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(9, item)
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.tab)
        self.plainTextEdit.setGeometry(QtCore.QRect(10, 270, 701, 81))
        self.plainTextEdit.setBackgroundVisible(False)
        self.plainTextEdit.setCenterOnScroll(False)
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.label = QtWidgets.QLabel(self.tab)
        self.label.setGeometry(QtCore.QRect(490, -10, 221, 151))
        self.label.setStyleSheet("")
        self.label.setObjectName("label")
        self.label_5 = QtWidgets.QLabel(self.tab)
        self.label_5.setGeometry(QtCore.QRect(10, 130, 71, 16))
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.tab)
        self.label_6.setGeometry(QtCore.QRect(10, 10, 81, 16))
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.tab)
        self.label_7.setGeometry(QtCore.QRect(10, 30, 121, 16))
        self.label_7.setObjectName("label_7")
        self.label_8 = QtWidgets.QLabel(self.tab)
        self.label_8.setGeometry(QtCore.QRect(10, 50, 161, 16))
        self.label_8.setObjectName("label_8")
        self.tabWidget.addTab(self.tab, "")

        self.retranslateUi(Form)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):

        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(0)

        _translate = QtCore.QCoreApplication.translate
        
        self.row_count = 1
        self.table_index = 0

        sqlite_connection = sqlite3.connect("Autosalon.db")
        cursor = sqlite_connection.cursor()

        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Автомобили"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("Form", "Код"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("Form", "Название"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Form", "Скорость(км\\ч)"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("Form", "Разгон(с)"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("Form", "Объем(см3)"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("Form", "Мощность"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("Form", "Расход(л)"))
        item = self.tableWidget.horizontalHeaderItem(7)
        item.setText(_translate("Form", "Стоимость"))
        item = self.tableWidget.horizontalHeaderItem(8)
        item.setText(_translate("Form", "Кузов"))
        item = self.tableWidget.horizontalHeaderItem(9)
        item.setText(_translate("Form", "Трансмиссия"))

        sqlite_select_query = """SELECT * FROM Авто WHERE Название LIKE 'Audi A3%'"""
        cursor.execute(sqlite_select_query)
        records = cursor.fetchall()

        for row in records:
            self.tableWidget.setRowCount(self.row_count)
            self.tableWidget.setItem(self.table_index, 0, QtWidgets.QTableWidgetItem(str(row[0])))
            self.tableWidget.setItem(self.table_index, 1, QtWidgets.QTableWidgetItem(str(row[1])))
            self.tableWidget.setItem(self.table_index, 2, QtWidgets.QTableWidgetItem(str(row[2])))
            self.tableWidget.setItem(self.table_index, 3, QtWidgets.QTableWidgetItem(str(row[3])))
            self.tableWidget.setItem(self.table_index, 4, QtWidgets.QTableWidgetItem(str(row[4])))
            self.tableWidget.setItem(self.table_index, 5, QtWidgets.QTableWidgetItem(str(row[5])))
            self.tableWidget.setItem(self.table_index, 6, QtWidgets.QTableWidgetItem(str(row[6])))
            self.tableWidget.setItem(self.table_index, 7, QtWidgets.QTableWidgetItem(str(row[7])))
            self.tableWidget.setItem(self.table_index, 8, QtWidgets.QTableWidgetItem(str(row[8])))
            self.tableWidget.setItem(self.table_index, 9, QtWidgets.QTableWidgetItem(str(row[9])))

            self.table_index += 1
            self.row_count += 1

        sqlite_blob_query = """SELECT photo FROM Album WHERE id = 1"""
        cursor.execute(sqlite_blob_query)
        record1 = cursor.fetchone()[0]

        # pix = QPixmap()
        # pix.loadFromData(record1.data())
        # self.label.setPixmap(pix)

        self.label.setText(_translate("Form", record1))

        self.plainTextEdit.setPlainText(_translate("Form", "Семейство хэтчбеков A3 представляет Audi в C-классе. Довольно широкий выбор бензиновых и дизельных силовых агрегатов мощностью от 102 до 250 л. с., а также наличие различных вариантов оснащения дают потенциальным покупателям больше возможностей для выбора подходящего автомобиля. В начале 2007 года "))
        self.label_5.setText(_translate("Form", "Модификация"))
        self.label_6.setText(_translate("Form", "Марка: Audi A3"))
        self.label_7.setText(_translate("Form", "Модельный год: 2012"))
        self.label_8.setText(_translate("Form", "Объем багажника(л): 350-1080"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Form", "Audi A3"))

        cursor.close()
        sqlite_connection.close()

Но выводится только вот это -

Рис 2

Вот так выглядит БД -

Рис 3

Как правильно вывести ?
Или м.б. есть другие типы данных из которых удобнее выводить изображения ?

Источник: https://ru.stackoverflow.com/questions/1264823/%D0%9A%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%BE%D0%BC-blob-%D0%B2-qlabel-%D0%B8%D0%B7-%D0%B1%D0%B4-sqlite3

Тебе может это понравится...

Добавить комментарий