QTableWidget
- QTableWidget : 表格元件,類似excel。
QTableWidget 添加元件和增加刪除元素到表格。
-
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)
: 用來在指定的位置插入行或列。
QTableWidget 查找
-
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()
QTableWidget 常用的信號
在 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