pyqt, 将dataframe数据导入tableview中,要求能对其多列进行筛选,筛选出满足条件的行,要求能进行文本筛选或数学筛选,应用QSortFilterProxyModel,提供代码示例
时间: 2023-10-04 17:07:05 浏览: 107
QT-QSortFilterProxyModel代理实现排序、支持联合多列过滤
下面是一个简单的示例代码,使用 PyQt5 和 Pandas 库将 DataFrame 数据导入 QTableView 中,并使用 QSortFilterProxyModel 进行筛选:
```python
from PyQt5.QtCore import Qt, QSortFilterProxyModel
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
import pandas as pd
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 DataFrame 数据
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'Gender': ['Female', 'Male', 'Male', 'Male'],
'Salary': [5000, 6000, 7000, 8000]
}
df = pd.DataFrame(data)
# 创建 QStandardItemModel
model = QStandardItemModel(df.shape[0], df.shape[1], self)
model.setHorizontalHeaderLabels(df.columns)
# 将 DataFrame 数据导入 QStandardItemModel
for i in range(df.shape[0]):
for j in range(df.shape[1]):
model.setItem(i, j, QStandardItem(str(df.iloc[i, j])))
# 创建 QTableView
table_view = QTableView(self)
table_view.setModel(model)
# 创建 QSortFilterProxyModel
proxy_model = QSortFilterProxyModel(self)
proxy_model.setSourceModel(model)
table_view.setModel(proxy_model)
# 设置 QTableView 可筛选
table_view.setSortingEnabled(True)
table_view.setEditTriggers(QTableView.NoEditTriggers)
table_view.setSelectionBehavior(QTableView.SelectRows)
table_view.horizontalHeader().setSectionResizeMode(QTableView.Stretch)
# 筛选
proxy_model.setFilterKeyColumn(-1) # 对所有列进行筛选
proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive) # 不区分大小写
# 设置筛选规则
filter_text = 'al' # 筛选文本包含 'al'
# filter_text = '>30' # 筛选数值大于 30
# proxy_model.setFilterRegExp(filter_text) # 正则表达式匹配
proxy_model.setFilterFixedString(filter_text) # 字符串匹配
# 显示窗口
self.setCentralWidget(table_view)
self.setGeometry(100, 100, 500, 300)
self.show()
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
app.exec_()
```
在上述代码中,我们首先创建了一个 DataFrame 数据,然后使用 QStandardItemModel 将数据导入 QTableView 中。接着,我们创建了一个 QSortFilterProxyModel,并设置它的源模型为 QStandardItemModel,这样就可以在 QTableView 中使用 QSortFilterProxyModel 进行筛选。我们在代码中设置了 QTableView 可以对所有列进行筛选,并提供了两种筛选规则:文本匹配和数学匹配。你可以根据需要选择适当的筛选规则。最后,我们将 QTableView 设置为窗口的中央小部件,并显示窗口。
阅读全文