【问题标题】:Display BLOB data from sqlite On Pyqt5 DESIGN在 Pyqt5 DESIGN 上显示来自 sqlite 的 BLOB 数据
【发布时间】:2023-03-05 10:10:02
【问题描述】:

我的数据库包含名为 (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 ()


【问题讨论】:

标签: python sqlite pyqt5 blob qlabel


【解决方案1】:

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

你必须先创建一个新的QPixmap实例,然后加载数据,如果已经加载,最后在标签中显示:

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

PS:避免括号周围的空格字符,它们是不必要的和分散注意力的;另外,不要混淆和混合对基类的调用,在 python3 中,只需调用一次 super().__init__() 就足够了, 即使对于多个继承类

【讨论】:

  • 我不知道该说什么!,非常感谢.. 如何调整图像大小以适合标签大小
  • @hsmbarakat 你可以使用self.label.setScaledContents(True),但它总是会忽略原始图像的纵横比。如果你想使用默认的最大尺寸,你可以使用QPixmap.scaled():self.label.setPixmap(pix.scaled(self.defaultWidth, self.defaultHeight, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 2015-05-03
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多