在qabstractemmod中对案例进行不敏感排序

2024-09-25 10:24:40 发布

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

我很难尝试用qabstractemodel创建自己的排序函数。它可以工作,但不区分大小写。我尝试过使用QSortFilterProxyModel,但是成功了。我的排序函数:

def sort(self, col, order):
    self.emit(SIGNAL("layoutAboutToBeChanged()"))
    self.tableData = sorted(self.tableData, key=operator.itemgetter(col))       
    if order == Qt.AscendingOrder:
        self.tableData.reverse()
    self.emit(SIGNAL("layoutChanged()"))

我正在使用QTableView。我怎么能不区分大小写?在

完整示例:

^{pr2}$

示例中的表数据显示排序-不区分大小写。在


Tags: 函数self示例signal排序defordercol
1条回答
网友
1楼 · 发布于 2024-09-25 10:24:40

您只需将传递给sorted函数的排序键中的值转换为小写(或大写)。为了提高效率,还可以使用reverse参数来避免在单独的步骤中执行此操作:

def sort(self, col, order):
    self.layoutAboutToBeChanged.emit()
    self.tableData = sorted(
        self.tableData,
        key=lambda row: row[col].lower(),
        reverse=(order != Qt.AscendingOrder),
        )
    self.layoutChanged.emit()

请注意,sorted执行一个稳定排序,因此相等的值(在应用了键之后)将保留它们的原始位置。因此,示例中的第二列在排序时不会显示任何更改,因为这些值都是“相同的”(如果忽略大小写)。在

更新

这里有一个对字符串和数字有效的解决方案。它假定列不是两种类型的混合:

^{pr2}$

相关问题 更多 >