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