下面是一个示例,展示了如何使用QSortFilterProxyModel对列值进行排序和筛选。
from PyQt5.QtCore import QSortFilterProxyModel, Qt
from PyQt5.QtWidgets import QApplication, QTableView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
# 创建一个标准的数据模型
model = QStandardItemModel()
model.setColumnCount(3)
model.setHeaderData(0, Qt.Horizontal, "Name")
model.setHeaderData(1, Qt.Horizontal, "Age")
model.setHeaderData(2, Qt.Horizontal, "City")
# 添加一些示例数据
data = [
("John", 30, "New York"),
("Alice", 25, "London"),
("Bob", 35, "Paris"),
("Emily", 40, "Tokyo"),
]
for row, (name, age, city) in enumerate(data):
model.setItem(row, 0, QStandardItem(name))
model.setItem(row, 1, QStandardItem(str(age)))
model.setItem(row, 2, QStandardItem(city))
# 创建一个QSortFilterProxyModel,并设置源模型为我们创建的标准模型
proxy_model = QSortFilterProxyModel()
proxy_model.setSourceModel(model)
# 设置排序功能为按第一列(Name)进行排序
proxy_model.setSortRole(Qt.DisplayRole)
proxy_model.sort(0, Qt.AscendingOrder)
# 设置筛选功能为只显示年龄大于等于30的行
proxy_model.setFilterRole(Qt.DisplayRole)
proxy_model.setFilterRegExp("3[0-9]")
# 创建一个表格视图,并设置模型为我们创建的代理模型
table_view = QTableView()
table_view.setModel(proxy_model)
# 显示表格视图
app = QApplication([])
table_view.show()
app.exec()
在上面的示例中,我们首先创建了一个标准的数据模型,并添加了一些示例数据。然后,我们创建了一个QSortFilterProxyModel,并设置其源模型为我们创建的标准模型。接下来,我们设置了排序功能为按第一列(Name)进行排序,并设置筛选功能为只显示年龄大于等于30的行。最后,我们创建了一个表格视图,并将模型设置为我们创建的代理模型,然后显示表格视图。
当运行这个示例时,你会看到表格视图中只显示了年龄大于等于30的行,并按照第一列的值进行了升序排序。你可以根据自己的需求修改排序和筛选的条件。
上一篇:按列值排序
下一篇:按列值拼接数据框(无外连接合并)