如何解决InterfaceError:错误绑定参数4-可能不受支持的type.for图像和Blob图像未显示在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,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,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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。