【问题标题】:Sort by column but with custom sorting algorithm?按列排序但使用自定义排序算法?
【发布时间】:2022-01-08 08:02:56
【问题描述】:

我在这里找到了 PyQt4 的解决方案: How to sort a QTableWidget with my own code? (我的代码和我需要做的与链接中的几乎相同,而是我使用 TableView 和 PySide2)

我必须在这个项目中使用 Pyside2。

当用户单击列的标题时,我将如何使用 self.tableView.sortByColumn(0, MyCustomSorting) 之类的东西而不是 self.tableView.sortByColumn(0, Qt.AscendingOrder)

谢谢

【问题讨论】:

  • 如果您使用的是 QTableView,那么您使用的是自己的模型,因此您不能使用该链接中建议的内容,并且必须从模型中进行排序。考虑使用QSortFilterProxyModel 并实现lessThan
  • 感谢您的提示.. 但我想我是菜鸟.. 我自己无法解决这个问题.. 我不知道如何实现 lessThan,我也不知道如何连接它,以便当用户单击表中标题的箭头进行排序(如升序或降序 - 除非我需要我自己的升序和降序自定义排序)

标签: python pyside2


【解决方案1】:

通过 cmets 中提供的 @musicamante 提示,我想办法弄清楚了。 首先,我将 lessThan 方法从 QSortFilterProxyModel 重新实现为 My_QSortFilterProxyModel

class My_QSortFilterProxyModel(QSortFilterProxyModel):
    def lessThan(self, left, right):
        leftData = self.sourceModel().data(left)
        rightData = self.sourceModel().data(right)

        try:  # For table Nuke scripts)
            if leftData > rightData:
                return False
            else:
                return True

这会比较我理解的前后值(左和右),如果它返回 True,则首先显示 leftData,如果为 False,则首先显示 rightData。

稍后在我的主课中,通常我们分配self.my_proxy_model = My_QSortFilterProxyModel()

【讨论】:

    猜你喜欢
    • 2016-10-28
    • 2017-07-30
    • 2016-01-09
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2013-02-16
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多