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

Sé que el problema proviene de los valores de mi imagen, pero no sé cómo manejarlo, lo mejor que pude hacer fue convertir la imagen de la almohada en una cadena y, al hacerlo, puedo mostrar la imagen en la etiqueta PYQT, la etiqueta simplemente sale vacío.

0
Azucode 26 ago. 2020 a las 18:18

1 respuesta

La mejor respuesta

El tipo de datos BLOB ahorra bytes, en su caso, está tratando de guardar un objeto PIL que arroja el error. La solución es convertir esos objetos. Entonces ocurre lo mismo con los datos obtenidos de la base de datos pero a la inversa:

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
eyllanesc 26 ago. 2020 a las 19:15