PyQt4:按包含图标的列对QTableWidget进行排序

2024-04-25 14:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含项目列表的数据库,每个项目都有一个相关的“评级”字段,这个字段的浮动范围为0-5。现在,当我用这些项目填充QTableWidget时,我想显示一个评级图像,而不是浮动。所以我这样做:

iconPath = "images/icons/ratings/"+backend.utilities.pickRatingIcon(col)
icon = QtGui.QIcon(QtGui.QPixmap(iconPath))
item = QtGui.QTableWidgetItem(icon, "")
self.deckTable.setItem(i, j, item)

一切正常,但我自然失去了按列排序的能力。我可以把第三行改成这样:

^{pr2}$

这允许我再次排序,但是我得到了图标旁边的浮动,这有点不符合目的。有没有办法只显示图标而按值排序?在


Tags: 项目图像backend数据库列表排序item图标
2条回答

首先,你必须存储评级。在

item = QtGui.QTableWidgetItem(icon, "")
self.deckTable.itemsRating[item]=rating
self.deckTable.setItem(i, j, item)

然后重写子类QtableWidget的sortItems并手动重新排列项:

^{pr2}$

我找到了一个对我有用的答案。这基本上和我之前做的一样-也就是说,值包含在图标中。但是我正在调整列的大小以覆盖该值,然后阻止它调整大小。在

item = QtGui.QTableWidgetItem()
# We set our icon and value
item.setIcon(icon)
item.setData(QtCore.Qt.EditRole, QtCore.QVariant(col))
# We set the size of our item. My icon is 80x32 pixels, but it was getting clipped off so I added 5 pixels of width
item.setData(QtCore.Qt.SizeHintRole, QtCore.QSize(85,32))
# We prevent the column from being resized. In my case it's the first column, so the index is 0
self.deckTable.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.Fixed)

相关问题 更多 >

    热门问题