在PYQT中用图像填充列表
我有一个外部数据库,里面存储着产品的图片。请问有没有办法把这些图片导入进来,并以滚动列表的方式展示出来?而且用户还可以点击这些图片,就像在文件浏览器里那样?
我只找到一些关于把图片转换成资源文件的信息,但我在想,是否可以不经过这个步骤?
2 个回答
0
这不是一个简单的复制粘贴的答案,但我觉得这是可行的:
- 获取图片数据
- 从图片数据构建一个
QPixmap
。你可以先通过QImage
作为中间步骤,然后使用QPixmap.convertFromImage
。 - 使用任何一种“列表”类型的控件,你可以使用
QStandardItemModel
,将项目的图标设置为QIcon(pixmap)
,这里的 pixmap 就是你在第二步创建的。
可以查看提到的类的 qt/Pyqt 类参考文档:
11
好的,ListView和ListWidget都可以让用户以列表模式或图标模式来显示内容。所以你可以把显示模式设置为图标模式,这样就可以在列表视图中显示图片了。
self.listView.setViewMode(QtGui.QListView.IconMode)
或者
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
把上面的代码放在你的类外面。
self.listWidget.setViewMode(QtGui.QListView.IconMode)
item = QtGui.QListWidgetItem()
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/sameold/capture_14.jpg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
item.setIcon(icon)
self.listWidget.addItem(item)
这是这个的输出结果。
import os
files=[]
for file in os.listdir("C:/"):
if file.endswith(".jpeg"):
files.append(os.path.join(os.getcwd(), file))
for x in files:
item = QtGui.QListWidgetItem()
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8(x)), QtGui.QIcon.Normal, QtGui.QIcon.Off)
item.setIcon(icon)
self.listWidget.addItem(item)