PyQt5筛选器
时间: 2023-07-16 19:16:24 浏览: 119
PyQt5中的筛选器是指在视图控件中过滤和排序数据的一种方法。常见的视图控件包括QTableView、QListView和QTreeView等。
在PyQt5中,我们可以使用QSortFilterProxyModel类来实现筛选器。该类是一个代理模型,它可以接收原始模型的数据,并对其进行过滤和排序,然后将结果提供给视图控件。
以下是一个简单的示例,演示如何使用QSortFilterProxyModel类在QTableView中过滤和排序数据:
```python
from PyQt5.QtCore import Qt, QSortFilterProxyModel
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 600, 400)
# 创建数据模型
self.model = QStandardItemModel()
self.model.setHorizontalHeaderLabels(['Name', 'Age'])
# 添加数据
for row in range(5):
name = QStandardItem('Person {}'.format(row))
age = QStandardItem(str(row * 10))
self.model.appendRow([name, age])
# 创建代理模型
self.proxy_model = QSortFilterProxyModel()
self.proxy_model.setSourceModel(self.model)
# 创建表格视图
self.table_view = QTableView()
self.table_view.setModel(self.proxy_model)
self.table_view.resizeColumnsToContents()
self.setCentralWidget(self.table_view)
# 添加筛选器
self.table_view.setSortingEnabled(True)
self.table_view.sortByColumn(1, Qt.AscendingOrder)
self.proxy_model.setFilterRegExp('Person 2')
if __name__ == '__main__':
app = QApplication([])
win = MyWindow()
win.show()
app.exec_()
```
在该示例中,我们首先创建了一个QStandardItemModel数据模型,并向其中添加了一些数据。然后,我们创建了一个QSortFilterProxyModel代理模型,并将其设置为原始模型的来源。接下来,我们创建了一个QTableView表格视图,并将代理模型设置为其模型。最后,我们启用了表格视图的排序功能,并设置了一个正则表达式筛选器,以仅显示名称为“Person 2”的行。
这只是一个简单的示例,你可以根据自己的需求进行更改和扩展。
阅读全文