在 PyQt 模型中按多列排序

Posted

技术标签:

【中文标题】在 PyQt 模型中按多列排序【英文标题】:Sort by Multiple Columns in PyQt Model 【发布时间】:2012-03-22 09:05:17 【问题描述】:

我想在基于模型/视图的PyQt 应用程序中使用与以下SQL 语句等效的PyQt

SELECT * FROM table ORDER BY foo, bar

如何按QSqlTableModel 中的多列排序,尤其是因为setSort() 接受单个column 参数?

【问题讨论】:

【参考方案1】:

似乎有一个替代setSort(),称为setFilter()。 来自 PyQt 文档:

QSqlTableModel.setFilter(self,QString过滤器)

将当前过滤器设置为过滤器。

过滤器是一个没有关键字 WHERE 的 SQL WHERE 子句(对于 例如,name='Josephine')。

所以,这解决了问题:

fooModel.setFilter("never_zero != 0 ORDER BY foo, bar")

never_zero 字段是(惊喜,惊喜)从不为零。

【讨论】:

这更像是作弊,可能会产生误导。您通常不希望在过滤器中对查询进行排序。当您需要复杂的查询时,QSqlTableModel 相当有限。 QSqlQueryModel 应该是选项。如果您需要写访问权限,您可以将其子类化以提供适当的方法。或者,如果您的数据集不是那么大,您可以考虑在两者之间放置一个自定义 QSortFilterProxyModel。它需要自定义,因为原始 QSortFilterProxyModel 也需要单列进行排序,但它很容易继承并提供您自己的排序实现。

以上是关于在 PyQt 模型中按多列排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中按多列分组并按日期排序?

如何在 Python 中按多列对 Pandas DataFrame 进行排序

当Relation是同一张表中的键时,使用CGridView在Yii中按相关模型搜索和排序

如何在 Laravel 5.1 中按多列对 Illuminate Collection 进行排序?

在 django 中按模型字段的子字符串对对象进行排序

在r中按多列排序矩阵