定义模型并初始化数据,将模型传给table widget,举个完整的例子
时间: 2023-12-10 22:05:04 浏览: 79
好的,我来给你一个例子:
假设我们有一个包含学生信息的数据集,其中包含学生的姓名、年龄、性别、班级等信息。现在我们想要将这个数据集展示在一个表格中,同时还想加入一个筛选功能,可以根据班级筛选学生信息。
步骤如下:
1. 定义模型
我们可以使用 Qt 中提供的 QStandardItemModel 来定义模型。该模型可以用来存储任意结构的数据。在这个例子中,我们需要定义一个包含表头和数据的模型。
```python
from PyQt5.QtGui import QStandardItemModel, QStandardItem
model = QStandardItemModel()
model.setHorizontalHeaderLabels(['姓名', '年龄', '性别', '班级'])
```
2. 初始化数据
我们可以使用一个字典列表来表示学生信息,然后遍历该列表,将每个学生的信息添加到模型中。
```python
students = [
{'name': '张三', 'age': 18, 'gender': '男', 'class': '一班'},
{'name': '李四', 'age': 19, 'gender': '女', 'class': '二班'},
{'name': '王五', 'age': 20, 'gender': '男', 'class': '一班'},
{'name': '赵六', 'age': 21, 'gender': '女', 'class': '三班'},
{'name': '钱七', 'age': 22, 'gender': '男', 'class': '二班'}
]
for i, student in enumerate(students):
row = []
row.append(QStandardItem(student['name']))
row.append(QStandardItem(str(student['age'])))
row.append(QStandardItem(student['gender']))
row.append(QStandardItem(student['class']))
model.appendRow(row)
```
3. 将模型传给table widget
最后,我们可以将模型传给 QTableView,通过 setModel 方法来显示表格。
```python
from PyQt5.QtWidgets import QApplication, QTableView
app = QApplication([])
table = QTableView()
table.setModel(model)
table.show()
app.exec_()
```
4. 加入筛选功能
如果想要加入筛选功能,我们可以使用 QSortFilterProxyModel 来实现。该模型可以对其他模型进行筛选和排序。
```python
from PyQt5.QtCore import Qt, QSortFilterProxyModel
proxy = QSortFilterProxyModel()
proxy.setSourceModel(model)
proxy.setFilterKeyColumn(3) # 根据班级(第 3 列)筛选
def on_filter_changed(text):
proxy.setFilterRegExp(text)
line_edit = QLineEdit()
line_edit.textChanged.connect(on_filter_changed)
layout = QVBoxLayout()
layout.addWidget(line_edit)
layout.addWidget(table)
widget = QWidget()
widget.setLayout(layout)
widget.show()
app.exec_()
```
这样就完成了一个包含筛选功能的表格窗口。完整代码如下:
阅读全文