PyQt – QTableView中的简单工作示例

PyQt – QTableView中的简单工作示例

在本文中,我们将介绍如何在PyQt中使用QTableView和QComboBox,并提供一个最简单的可工作的示例。

阅读更多:PyQt 教程

QTableView和QComboBox

QTableView是Qt中用于显示二维表格数据的控件。它使用模型/视图架构,其中模型存储数据并向视图提供数据。QComboBox是一个下拉列表框控件,可以让用户从预定义的选项中选择一项。

示例背景

假设我们正在开发一个学生成绩管理系统,并需要展示学生信息表格,包括学生姓名、课程名称和分数。课程名称字段应该是一个下拉列表,用户可以从预定义的课程选项中选择。

实现步骤

首先,我们需要创建一个PyQt应用程序并初始化一个QTableView。然后,我们将为学生信息表格创建一个模型,并定义其中的列。接下来,我们将为课程名称列添加一个QComboBox,并将其设置为可编辑。最后,我们将将模型设置为QTableView的模型,并显示表格。

以下是一个实现上述功能的最简单的PyQt代码示例:

import sys
from PyQt5.QtWidgets import QApplication, QTableView, QVBoxLayout, QWidget, QComboBox, QAbstractItemView
from PyQt5.QtCore import QAbstractTableModel, Qt

class StudentTableModel(QAbstractTableModel):
    def __init__(self, data):
        QAbstractTableModel.__init__(self)
        self.data = data
        self.column_names = ['姓名', '课程名称', '分数']

    def rowCount(self, parent=None):
        return len(self.data)

    def columnCount(self, parent=None):
        return len(self.column_names)

    def data(self, index, role=Qt.DisplayRole):
        if role == Qt.DisplayRole:
            return self.data[index.row()][index.column()]

    def headerData(self, section, orientation, role=Qt.DisplayRole):
        if role == Qt.DisplayRole and orientation == Qt.Horizontal:
            return self.column_names[section]

    def flags(self, index):
        if index.column() == 1:
            return Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled
        return Qt.ItemIsEnabled

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.table_view = QTableView()
        layout = QVBoxLayout()
        layout.addWidget(self.table_view)
        self.setLayout(layout)

data = [
    ['张三', '数学', '90'],
    ['李四', '英语', '85'],
    ['王五', '历史', '92']
]

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = MainWindow()
    model = StudentTableModel(data)
    main_window.table_view.setModel(model)

    combo_box = QComboBox()
    combo_box.addItems(['数学', '英语', '历史'])
    main_window.table_view.setItemDelegateForColumn(1, combo_box)

    main_window.table_view.setEditTriggers(QAbstractItemView.AllEditTriggers)
    main_window.show()
    sys.exit(app.exec_())

解释示例代码

我们定义了一个名为StudentTableModel的子类来实现表格数据模型。模型继承自QAbstractTableModel类,并重写了几个必要的方法。rowCountcolumnCount方法返回表格的行数和列数,data方法返回指定单元格的数据,headerData方法返回列的标题,并在flags方法中设置了课程名称列的属性。

MainWindow类继承自QWidget类,并创建了一个QTableView实例。然后我们通过QVBoxLayout将表格视图添加到主窗口的布局中。

我们通过创建一个包含示例学生数据的列表,并使用StudentTableModel类创建与该数据对应的模型实例。然后,我们将该模型设置为QTableView的模型,以显示数据。

我们还创建了一个QComboBox实例,并使用addItems方法向下拉列表框中添加课程选项。接下来,我们使用setItemDelegateForColumn方法,将QComboBox设置为课程名称列的代理编辑器。通过设置代理编辑器,我们可以在该列中显示下拉列表框,并允许用户从中选择课程选项。

最后,我们使用setEditTriggers方法将编辑触发器设置为QAbstractItemView.AllEditTriggers,以便用户可以在表格中进行编辑。然后显示主窗口,并通过app.exec_()运行应用程序。

总结

在这篇文章中,我们介绍了如何在PyQt中使用QTableView和QComboBox,并提供了一个最简单的可工作示例。通过创建自定义的数据模型并在QTableView中设置,我们可以实现表格的显示和编辑。通过将QComboBox作为列的代理编辑器,我们还能够在表格中显示下拉列表框,并允许用户进行选择。这个示例为我们展示了使用PyQt创建基本表格应用程序的基本步骤。希望这篇文章对于初学者能够有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程