一、基本概念
在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/zh-tw/n/138292.html