千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 如何使用PyQt5创建可编辑的表格

如何使用PyQt5创建可编辑的表格

来源:千锋教育
发布人:xqq
时间: 2023-11-25 13:26:12 1700889972

一、基本概念

在GUI编程中,表格是一个常用的控件之一。在PyQt5中,我们可以通过QTableWidget和QTableWidgetItem创建可编辑的表格。

QTableWidget是一个用于显示数据的小部件。它是基于模型/视图架构的,其数据存储在QTableWidget自身的模型中,我们通过自定义QTableWidgetItem在视图中展示。每一个QTableWidgetItem代表着一个单元格中的数据。

通过使用QTableWidget,我们可以创建一个二维表格。

二、创建可编辑的表格

我们可以通过以下代码创建一个可编辑的表格:


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('表格')
        self.setGeometry(300, 300, 500, 300)
        self.createTable()
        self.show()

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(4)
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(['姓名', '年龄'])

        for i in range(4):
            for j in range(2):
                item = QTableWidgetItem()
                item.setText('({}, {})'.format(i, j))
                self.table.setItem(i, j, item)

        self.table.cellChanged.connect(self.printTable)

        layout = QVBoxLayout()
        layout.addWidget(self.table)
        self.setLayout(layout)

    def printTable(self, row, column):
        item = self.table.item(row, column)
        print(item.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    table = Table()
    sys.exit(app.exec_())

在这个例子中,我们创建了一个4行2列的表格,并且设置了水平表头。我们通过循环设置每一个单元格的数据,最终在GUI中呈现出来。

同时我们也设置了cellChanged事件的监听,可以在单元格数据发生变化时触发事件并打印出变化后的文本。

三、在表格中插入控件

QTableWidgetItem支持在单元格中插入控件。我们可以通过以下代码创建一个带有QCheckBox的单元格:


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QCheckBox, QHBoxLayout, QVBoxLayout

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('表格')
        self.setGeometry(300, 300, 500, 300)
        self.createTable()
        self.show()

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(4)
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(['姓名', '选项'])

        for i in range(4):
            for j in range(2):
                if j == 0:
                    item = QTableWidgetItem()
                    item.setText('({}, {})'.format(i, j))
                    self.table.setItem(i, j, item)
                else:
                    cb = QCheckBox('选项{}'.format(i+1))
                    layout = QHBoxLayout()
                    layout.addWidget(cb)
                    layout.setAlignment(cb, QtCore.Qt.AlignCenter)
                    widget = QWidget()
                    widget.setLayout(layout)
                    self.table.setCellWidget(i, j, widget)

        self.table.cellChanged.connect(self.printTable)

        layout = QVBoxLayout()
        layout.addWidget(self.table)
        self.setLayout(layout)

    def printTable(self, row, column):
        if column == 1:
            widget = self.table.cellWidget(row, column)
            cb = widget.children()[0]
            print(cb.isChecked())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    table = Table()
    sys.exit(app.exec_())

在这个例子中,我们创建了一个带有QCheckBox的表格。我们通过QHBoxLayout创建一个带有一个QCheckBox的控件,并设置为单元格中的Widget。

在cellChanged事件中,我们可以通过cellWidget获取单元格中的Widget,并进一步获取QCheckBox控件的状态值。

四、总结

在PyQt5中,我们可以通过QTableWidget和QTableWidgetItem创建可编辑的表格,同时也可以在单元格中插入控件,丰富表格的展示形式。

以上是如何使用PyQt5创建可编辑的表格的详细阐述,希望可以对你有所帮助。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT