【问题标题】:Sort a QTreeWidgetItem by a data value?按数据值对 QTreeWidgetItem 进行排序?
【发布时间】:2012-07-04 21:25:56
【问题描述】:

是否可以通过 QTreeWidgetItem 的数据列对 PyQt QTreeWidget 进行排序?

例如,我有一个目录列表,我想在 QTreeWidget 中显示的磁盘上按大小排序,但我没有显示结果(以字节为单位),而是使用一种方法将目录大小转换为兆字节/千兆字节,但仍然可以按我存储在 QTreeWidgetItem 的数据槽中的实际值对项目进行排序。

【问题讨论】:

    标签: sorting pyqt qtreewidget qtreewidgetitem


    【解决方案1】:

    是的,我经常遇到这种情况。我一直认为理论上可以这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 2012-11-06
      • 2020-01-23
      • 2022-11-12
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多