Отображение BLOB-данных из sqlite на Pyqt5 DESIGN - PullRequest
0 голосов
/ 16 марта 2020

У меня есть база данных, включающая BLOB-столбец с именем (IMG). Что мне нужно, чтобы при поиске по коду отображалось изображение элемента, но результат всегда был таким (caV \ xd6 \ xf7 \ xd0 \ xec] c \ x1b \ x95 \ XE2 \ xa4 \ x00 \ XE3 \ XD3 \ x82L \ xc9L \ xa2W8H \ XAF \ xe4 \ xe0 \ x9f \ XCB \ x7f \ XB5 \ xbautm] \ x94 \ '\ XB6 \ xb7p \ xa7 {\ xbffU \ xb7Q \ xd5 \ x8d \ xe3 \ xe1 \ xb .... et c)

import io
import base64
from PyQt5 import QtGui
from ui import Ui_MainWindow
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import ast
import sqlite3
import sys

class HmcProject ( QMainWindow, Ui_MainWindow ):  # ,FORM_CLASS
    def __init__(self):
        QMainWindow.__init__ ( self )
        super ( HmcProject, self ).__init__ ()
        self.setupUi ( self )
        self.Handle_Buttons ()
        self.Db_Connect ()
        self.Image_Retrive()


    def Db_Connect(self):
        self.connection = sqlite3.connect ( 'deals_db.db' )
        cursor = self.connection.cursor ()

    def Handle_Buttons(self):
        self.pushButton.clicked.connect(self.Image_Retrive)


    def Image_Retrive(self):
        try:

            cursor = self.connection.cursor ()
            itemsearch = self.lineEdit_Item_NameS_3.text ()

            sql = ('''
            SELECT IMG  FROM deals_data 
            WHERE ITEM_CODE= ?
            ''')

            cursor.execute ( sql,[(itemsearch)])
            data = cursor.fetchone ()
            print ( data [0])
            pix= QPixmap.loadFromData(data[0])
            self.label.setPixmap(pix)

        except:
            pass

def main():
    app = QApplication ( sys.argv )
    window = HmcProject ()
    window.show ()
    app.exec_ ()


if __name__ == '__main__':
    main ()


1 Ответ

0 голосов
/ 16 марта 2020

Вы пытаетесь загрузить растровое изображение, используя loadFromData() в качестве функции c, но это не так.
Кроме того, эта функция возвращает bool, сообщая о загрузке был успешным.

Вы должны сначала создать новый экземпляр QPixmap, затем загрузить данные и, наконец, показать их в метке, если они были загружены:

    pix = QPixmap()
    if pix.loadFromData(data[0]):
        self.label.setPixmap(pix)

PS: избегайте пробелов в круглых скобках, они не нужны и отвлекают; также не путайте и не смешивайте вызовы базовых классов, в python3 достаточно вызвать super().__init__() только один раз, даже для нескольких классов наследования

...