一、基本概念
在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创建可编辑的表格的详细阐述,希望可以对你有所帮助。
原创文章,作者:ULZF,如若转载,请注明出处:https://www.506064.com/n/138292.html