在 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 模型中按多列排序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中按多列对 Pandas DataFrame 进行排序
当Relation是同一张表中的键时,使用CGridView在Yii中按相关模型搜索和排序