0
是否可以通過QTreeWidgetItem的數據列對PyQt QTreeWidget進行排序?按數據值對QTreeWidgetItem進行排序?
例如,我有一個目錄列表,我想按照QTreeWidget中顯示的磁盤大小進行排序,但不是顯示結果(以字節爲單位),而是使用一種方法將目錄大小轉換爲兆字節/千兆字節,但仍然能夠按照我存儲在QTreeWidgetItem的數據插槽中的實際值對項目進行排序。
是否可以通過QTreeWidgetItem的數據列對PyQt QTreeWidget進行排序?按數據值對QTreeWidgetItem進行排序?
例如,我有一個目錄列表,我想按照QTreeWidget中顯示的磁盤大小進行排序,但不是顯示結果(以字節爲單位),而是使用一種方法將目錄大小轉換爲兆字節/千兆字節,但仍然能夠按照我存儲在QTreeWidgetItem的數據插槽中的實際值對項目進行排序。
是的,我遇到了很多。我一直認爲理論上是這樣做的:
item = QTreeWidgetItem()
item.setData(0, Qt.EditRole, QVariant(1024))
item.setData(0, Qt.DisplayRole, '1 Kb')
應該工作......不幸的是它沒有。唯一真正的辦法得到它的工作是繼承QTreeWidgetItem,要麼保存您的排序信息,以自己的方式,或使用Qt.UserRole與EditRole或DisplayRole:
class MyTreeWidgetItem(QTreeWidgetItem):
def __lt__(self, other):
if (not isinstance(other, MyTreeWidgetItem)):
return super(MyTreeWidgetItem, self).__lt__(other)
tree = self.treeWidget()
if (not tree):
column = 0
else:
column = tree.sortColumn()
return self.sortData(column) < other.sortData(column)
def __init__(self, *args):
super(MyTreeWidgetItem, self).__init__(*args)
self._sortData = {}
def sortData(self, column):
return self._sortData.get(column, self.text(column))
def setSortData(self, column, data):
self._sortData[column] = data
所以,用它在這情況會類似於以前,但實際上允許通過自定義數據進行排序:
item = MyTreeWidgetItem()
item.setSortData(0, 1024)
item.setText(0, '1 kb')01
真棒...工作,謝謝! – mfessenden