我有一个 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/