python - 带有一列图像的 QTableView

标签 python image pyqt qtableview

我有一个 QTableView 以网格的形式显示数据库的一些信息。其中一个字段是图像的路径,我想在我的表格中显示这些图像。

我尝试了一些委托(delegate),但我对他们不太满意,而且我无法使任何工作正常进行。我也尝试了一些角色:

    if index.column() == 4:
        if role == QtCore.Qt.DecorationRole:
            label = QtGui.QLabel()
            path = "path/to/my/picture.jpg"
            image = QtGui.QImage(str(path)) 
            pixmap = QtGui.QPixmap.fromImage(image)
            label.setPixmap(pixmap)
            return label

这段代码的灵感来自于我在另一个论坛上发现的东西,它应该可以工作。但是它对我没有任何作用,只会减慢我的代码执行速度。

知道为什么它不起作用吗?如果您有代表的例子,我也会很感激!

感谢您的关注

已解决: 我让它与自定义委托(delegate)一起工作。如果有人感兴趣,这是我的代码:

class ImageDelegate(QtGui.QStyledItemDelegate):

    def __init__(self, parent):
        QtGui.QStyledItemDelegate.__init__(self, parent)

    def paint(self, painter, option, index):        

        painter.fillRect(option.rect, QtGui.QColor(191,222,185))

        # path = "path\to\my\image.jpg"
        path = "araignee_de_mer.jpg"

        image = QtGui.QImage(str(path))
        pixmap = QtGui.QPixmap.fromImage(image)
        pixmap.scaled(50, 40, QtCore.Qt.KeepAspectRatio)
        painter.drawPixmap(option.rect, pixmap) 

最佳答案

感谢您提供解决方案和代码示例,Johanna。这是一个巨大的帮助。

此外,如果其他人需要像我一样拼写出来:

1) 像这样为 QTableView 的图像承载列设置项目委托(delegate)(我在 myTableView.init() 中这样做):

self.setItemDelegateForColumn(1, yourImageDelegate(parent))

2) 在您的 ImageDelegate 类中,您可能希望为图像的大小重载 sizeHint(),如下所示:

def sizeHint(self, option, index) :
    return QSize(160, 90) # whatever your dimensions are

猛击!

关于python - 带有一列图像的 QTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6464741/

相关文章:

sqlite - 无法使用QtSqlDriver从带有“。”的表中检索数据在列名中

python - PyQt5 QTextEdit自动补全

python - 使用 py2exe 隐藏 Python GUI 应用程序的控制台窗口

python - 将 BigQuery 连接到 Python

python - 循环遍历一个列表以查看是否有任何用户名对应于其他列表 Python

android - 使用 Android Camera Intent 从同一个按钮拍摄视频或静态图片

image - 在不移动链接本身的情况下移动图像的垂直位置作为链接

python - gobject.type_register() 是做什么的?

python - 导入 win32com.client 错误

c++ - Qt - 将 JPEG 转换为 PNG 不提供相同的图像