一、基本概念
在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
微信掃一掃
支付寶掃一掃