在 Pyqt5 DESIGN 上显示来自 sqlite 的 BLOB 数据

Display BLOB data from sqlite On Pyqt5 DESIGN

我有数据库包括名为 (IMG) 的 BLOB 列 我需要的是在按代码搜索时显示项目图像,但结果总是那样 (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...等等)

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 ()


您正在尝试使用 loadFromData() 作为静态函数加载像素图,但事实并非如此。
此外,该函数 returns a bool,报告加载是否成功。

首先要新建一个QPixmap实例,然后加载数据,如果已经加载,最后显示在label中:

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

PS:避免在括号周围使用 space 字符,它们是不必要的并且会分散注意力;另外,不要混淆和混合基数 类 上的调用,在 python3 中调用 super().__init__() 一次就足够了, 即使是多重继承 类