繁体   English   中英

InterfaceError: Error binding parameter 4 - 可能不支持的类型。对于图像和 blob 图像不显示在 QTLabel 上

[英]InterfaceError: Error binding parameter 4 - probably unsupported type.for image and blob image does not display on QTLabel

from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtGui

from PIL import Image, ImageQt    
import cv2 as cv
img =  cv.imread('1.1 cat.jpeg.jpeg')
im = Image.fromarray(img)
im.save('file.png')

con = lite.connect('Final_Avirs.db')
cur = con.cursor()
def createtb():
    queryveh = """CREATE TABLE IF NOT EXISTS VehicleTB(Scan_DI  INTEGER PRIMARY KEY NOT NULL UNIQUE,
    Vehicle_number  TEXT NOT NULL, Vehicle_type TEXT NOT NULL, Cam_loc  TEXT NOT NULL, Date_Time    TEXT NOT NULL, 
    Vehicle_number_pic BLOB NOT NULL) """
 

    cur.execute(queryveh)
    con.commit()

def vehicledetailsquery(vn, vt, cl, dt, vnp):
    scan_id = vn + "1"
    query = " INSERT INTO 'VehicleTB' ( Vehicle_number, Vehicle_type, Cam_loc, " \
            "Date_Time, Vehicle_number_pic ) VALUES( ?, ?, ?, ?, ?)"
    cur.execute(query, (vn, vt, cl, dt, vnp))
    con.commit()
    
img = Image.open('file.png')
createtb()

vehicledetailsquery('aswe23','2039230', 'cam-2', '23343', img )

app = QtWidgets.QApplication([])
def vehicletbquery():
    query = "SELECT * from VehicleTB"
    vehicletb = cur.execute(query).fetchall()
    return vehicletb
data = vehicletbquery()

ww = QtWidgets.QLabel()
for i, d in enumerate(data):
    if i == 6:
        ww.w.setPixmap(QtGui.QPixmap.fromImage(d))
        
ww.show()
app.exec()

我知道问题出在我的图像值上,但我不知道如何处理它,我能做的最好的事情就是将 Pillow 图像转换为字符串并这样做,我可以在 PYQT 标签上显示图像,标签只是出来是空的。

数据类型 BLOB 保存字节,在您的情况下,您正在尝试保存抛出错误的 PIL 对象。 解决方案是转换这些对象。 然后从数据库中获取的数据也会发生同样的情况,但反过来:

import sqlite3
import io
from PyQt5 import QtGui, QtWidgets

from PIL import Image
import cv2 as cv

img =  cv.imread('1.1 cat.jpeg.jpeg')
im = Image.fromarray(img)
im.save("file.png")


con = sqlite3.connect("Final_Avirs.db")
cur = con.cursor()


def createtb():
    queryveh = """CREATE TABLE IF NOT EXISTS VehicleTB(Scan_DI  INTEGER PRIMARY KEY NOT NULL UNIQUE,
    Vehicle_number  TEXT NOT NULL, Vehicle_type TEXT NOT NULL, Cam_loc  TEXT NOT NULL, Date_Time    TEXT NOT NULL, 
    Vehicle_number_pic BLOB NOT NULL) """

    cur.execute(queryveh)
    con.commit()


def vehicledetailsquery(vn, vt, cl, dt, vnp):
    scan_id = vn + "1"
    query = (
        " INSERT INTO 'VehicleTB' ( Vehicle_number, Vehicle_type, Cam_loc, "
        "Date_Time, Vehicle_number_pic ) VALUES( ?, ?, ?, ?, ?)"
    )
    cur.execute(query, (vn, vt, cl, dt, vnp))
    con.commit()


img = Image.open("file.png")
createtb()

# convert to bytes
f = io.BytesIO()
img.save(f, format="PNG")
img_bytes = f.getvalue()

vehicledetailsquery("aswe23", "2039230", "cam-2", "23343", img_bytes)


def vehicletbquery():
    query = "SELECT * from VehicleTB"
    vehicletb = cur.execute(query).fetchall()
    return vehicletb


data = vehicletbquery()

app = QtWidgets.QApplication([])

scroll_area = QtWidgets.QScrollArea(widgetResizable=True)
container = QtWidgets.QWidget()
scroll_area.setWidget(container)
lay = QtWidgets.QVBoxLayout(container)


for row_data in data:
    for i, d in enumerate(row_data):
        if i == 5:
            # QPixmap from bytes
            pixmap = QtGui.QPixmap()
            pixmap.loadFromData(d)
            label = QtWidgets.QLabel()
            label.setPixmap(pixmap)
            lay.addWidget(label)

scroll_area.show()
app.exec()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM