全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

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

发布时间:2023-11-25 13:26:12
发布人:xqq

一、基本概念

在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创建可编辑的表格的详细阐述,希望可以对你有所帮助。

pythonclassdef

相关文章

windows下写linux代码编辑器,windows编辑linux文件

windows下写linux代码编辑器,windows编辑linux文件

2023-11-25
linux系统二进制文件变小,linux二进制文件放置

linux系统二进制文件变小,linux二进制文件放置

2023-11-25
linuxshellfor目录,linux shell目录

linuxshellfor目录,linux shell目录

2023-11-25
archlinux安装aptget,archlinux安装edge浏览器

archlinux安装aptget,archlinux安装edge浏览器

2023-11-25

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取