将图像从 MySQL 获取到 PyQt5 中的 tableWidget
Posted
技术标签:
【中文标题】将图像从 MySQL 获取到 PyQt5 中的 tableWidget【英文标题】:Getting Image from MySQL into tableWidget in PyQt5 【发布时间】:2020-09-24 11:31:26 【问题描述】:我已经能够从数据库中获取数据并填充到 tableWidget 中,但是没有显示图像列。我尝试了我在网上找到的代码,但它仍然不起作用。数据库中的图像列具有 BLOB 数据类型。请协助更正我的以下代码。或者您可能想建议和推荐 tableWidget 以外的其他方法
def getPersData(self):
con = mysqldb.connect(host="localhost", user="root", password="", database="db")
with con:
cur = con.cursor()
query = cur.execute("SELECT * FROM persons")
rows = cur.fetchall()
for row_number, row_data in enumerate(rows):
self.ui.tableWidget.insertRow(row_number)
for column_number, column_data in enumerate(row_data):
if column_number == 1:
item = self.getImg(column_data)
self.ui.tableWidget.setCellWidget(row_number, column_number, item)
else:
self.ui.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(column_data)))
self.ui.tableWidget.verticalHeader().setDefaultSectionSize(100)
self.ui.tableWidget.show()
def getImg(self, img):
img_label = self.ui.label
img_label.setText("")
img_label.setScaledContents(True)
pixmap = QPixmap()
pixmap.loadFromData(img, "PNG")
img_label.setPixmap(pixmap)
return img_label
【问题讨论】:
【参考方案1】:使用字节的逻辑(在my previous answer中我建议使用base64,所以我在这种情况下也使用它)构建一个可以转换为可以在QTableWidget中显示的QIcon的QPixmap:
for row_number, row_data in enumerate(rows):
self.ui.tableWidget.insertRow(row_number)
for column_number, column_data in enumerate(row_data):
it = QTableWidgetItem()
if column_number == 1:
pixmap = QPixmap()
pixmap.loadFromData(QByteArray.fromBase64(row_data))
icon = QIcon(pixmap)
it.setIcon(icon)
else:
it.setText(row_data)
self.ui.tableWidget.setItem(row_number, column_number, it)
【讨论】:
以上是关于将图像从 MySQL 获取到 PyQt5 中的 tableWidget的主要内容,如果未能解决你的问题,请参考以下文章
从 PyQt5 中的 QTableWidget 中删除单元格填充
如何将变量从 PyQt5 UI 返回到 Main 函数 - Python