QTableWidget() : 表格元件。在表格元件 QTableWidget 中,每個單元格的類型都是 QTableWidgetItem。setRowCount(int) 和 setColumnCount(int) : 用來設定表格的行數和列數。下面的範例中,設置了一個擁有 10 rows、5 cloumns的表格。from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個10*5的表格
Table = QTableWidget()
Table.setRowCount(10)
Table.setColumnCount(5)
self.resize(600,600)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

setItem(row , column , item) :用來設置單元格的內容,只能放入 QTableWidgetItem 對象。下面是與 enumerate(List) 搭配使用的範例,其中 enumerate(List) 會回傳索引值 index 和對應的列表項目 list[index]。from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout ,QTableWidgetItem
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個10*5的表格
Table = QTableWidget()
Table.setRowCount(10)
Table.setColumnCount(5)
#添加元素
data = [[str(i) for i in range(5)],[str(i) for i in range(5,10)]]
for rowIndex , row in enumerate(data):
for columnIndex , item in enumerate(row):
Table.setItem(rowIndex, columnIndex , QTableWidgetItem(item))
self.resize(600,600)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

takeItem(row,col) : 用來刪除指定位置的元素。insertRow(row) 和 insertColumn(Column) : 用來在指定的位置插入行或列。item(index): 取出指定的元素。findItem(str,flag): 查找表格中的元素,可以通過不同的匹配方式進行查找,這需要配合 Qt.MatchFlag 使用。下面的範例選用了 MatchContains,這會在元素內容包含指定文字時進行匹配並列印出結果。from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout ,QTableWidgetItem
from PySide6.QtCore import Qt
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個2*5的表格
Table = QTableWidget()
Table.setRowCount(2)
Table.setColumnCount(3)
#添加元素
data = [["apple","banana",'car'],["dog","car","door"]]
for rowIndex , row in enumerate(data):
for columnIndex , item in enumerate(row):
Table.setItem(rowIndex, columnIndex , QTableWidgetItem(item))
#查找
result = Table.findItems("d",Qt.MatchFlag.MatchContains)
for item in result:
print(f'第{item.row()}row,第{item.column()}column,內容是{item.text()}')
self.resize(400,200)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

在 PySide6 中,當元件觸發信號時,會自動將相關參數傳遞給與該信號連接的槽函數。而 QTableWidget 有兩個常用的信號,觸發方式相同,但傳遞的參數不同。
cellClicked(row , column) : 當使用者點擊某個單元格時觸發,會將該單元格的 row 和 column 傳遞給槽函數。下面範例中,當點擊某個單元格時,使用 setItem(row, column, item) 將該單元格的內容設為空白。from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout ,QTableWidgetItem
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個2*5的表格
self.Table = QTableWidget()
self.Table.setRowCount(2)
self.Table.setColumnCount(5)
#添加元素
for rowIndex , row in enumerate([["1","2","3","4","5"],["6","7","8","9","10"]]):
for columnIndex , item in enumerate(row):
self.Table.setItem(rowIndex, columnIndex , QTableWidgetItem(item))
#信號
self.Table.cellClicked.connect(self.ChangeItem)
self.resize(600,600)
layout = QVBoxLayout()
layout.addWidget(self.Table)
self.setLayout(layout)
def ChangeItem (self,row,column):
self.Table.setItem(row,column,QTableWidgetItem(""))
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
cellChanged(row,column) : 當單元格的內容改變時觸發信號。itemClicked(QTableWidgetItem) : 跟 cellActivated(row , column) 一樣當點擊單元格時會觸發信號,只是不同的是它會往槽函數裡傳遞 QTableWidgetItem 。| 功能 | 方法 |
|---|---|
| 添加表格 | QTableWidget() |
| 設定多少row | setRowCount(int) |
| 指定位置插入row | insertRow(row) |
| 設定多少Column | setColumnCount(int) |
| 指定位置插入Column | insertColumn(Column) |
| 設定指定表格內容 | setItem(row , column , item) |
| 刪除指定元素 | takeItem(row,col) |
| 功能 | 方法 |
|---|---|
| 查找元素 | findItem(str,flag) |
| 功能 | 方法 |
|---|---|
| 點擊單元格會觸發 | cellClicked.connect(function) |
| 當單元格的內容改變時觸發 | cellChanged.connect(function) |
| 點擊單元格會觸發 | itemClicked.connect(function) |
cellClicked(row , column) 是往槽函數傳遞 row 和 column 。itemClicked(QTableWidgetItem) 是往槽函數傳遞 QTableWidgetItem