在PYQT中用图像填充列表

5 投票
2 回答
9970 浏览
提问于 2025-04-18 01:18

我有一个外部数据库,里面存储着产品的图片。请问有没有办法把这些图片导入进来,并以滚动列表的方式展示出来?而且用户还可以点击这些图片,就像在文件浏览器里那样?

我只找到一些关于把图片转换成资源文件的信息,但我在想,是否可以不经过这个步骤?

2 个回答

0

这不是一个简单的复制粘贴的答案,但我觉得这是可行的:

  1. 获取图片数据
  2. 从图片数据构建一个 QPixmap。你可以先通过 QImage 作为中间步骤,然后使用 QPixmap.convertFromImage
  3. 使用任何一种“列表”类型的控件,你可以使用 QStandardItemModel,将项目的图标设置为 QIcon(pixmap),这里的 pixmap 就是你在第二步创建的。

可以查看提到的类的 qt/Pyqt 类参考文档:

http://qt-project.org/doc/qt-4.8/classes.html

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)

撰写回答