首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InterfaceError:错误绑定参数4-可能不支持的type.for图像和blob图像不在QTLabel上显示

InterfaceError:错误绑定参数4-可能不支持的type.for图像和blob图像不在QTLabel上显示
EN

Stack Overflow用户
提问于 2020-08-26 23:18:07
回答 1查看 51关注 0票数 0
代码语言:javascript
复制
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标签上显示图像,标签就会空出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 03:15:01

数据类型BLOB save bytes,在本例中,您正在尝试保存抛出错误的PIL对象。解决方案是转换这些对象。然后,从数据库中获得的数据也会发生同样的情况,但情况正好相反:

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63600683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档