QTableWidget部件中的QTableWidgetItem項數據可以通過項的data( int role) 方法獲取項中指定列指定角色的數據,也可以通過setData(int role, QVariant value)方法設置指定角色的數據為value。例如項的文本可以通過data方法和setData方法使用Qt.DisplayRole、Qt.EditRole這兩種角色去訪問。
關於數據的角色請參考《PyQt學習隨筆:Model/View中諸如DisplayRole的數據角色及含義》。
注意:
- role雖然是整數,但實際上是枚舉類型 Qt.ItemDataRole,關於及取值及含義請參考
- QVariant 表示任何PyQt的數據類型,所以value的類型沒有約束
- 關於Qt.DisplayRole、Qt.EditRole二者大多數情況下是一致的,有種說法是只有當顯示的數據是內部數據進行轉換后展示時會有所不同,例如性別數據可能是0和1,顯示為男和女,這種情況下就會不同,但關於這點的使用上老猿還沒有研究清楚,因為通過PyQt內置的便利類和Model/View標准類使用時,發現無論是讀取數據還是設置數據,二者的效果相同,因此老猿估計可能在從PyQt提供的內置類去派生類時可能有用。老猿驗證,在派生類中重新實現setData方法時,要獲取用戶在界面上修改的編輯數據,只能通過Qt.EditRole角色,Qt.DisplayRole取不到修改的數據。
示例代碼:
def initItems(self):
print(self.tableWidget.rowCount(),self.tableWidget.columnCount())
self.tableWidget.setRowCount(3
self.tableWidget.setColumnCount(3)
print(self.tableWidget.rowCount(), self.tableWidget.columnCount())
for row in range(3):
for col in range(3):
item = QtWidgets.QTableWidgetItem(f"({row},{col})")
self.tableWidget.setItem(row,col,item)
item.setData(QtCore.Qt.DecorationRole,QtGui.QIcon('.\\icon\\'+str(row+1)+'.gif'))#設置圖標
item.setData(QtCore.Qt.CheckStateRole, row%3) #設置復選狀態
item.setData(QtCore.Qt.TextAlignmentRole,col % 3) #設置文本對齊方式
print(self.tableWidget.rowCount(), self.tableWidget.columnCount())
item = QtWidgets.QTableWidgetItem(f"({row},{col})")
self.tableWidget.setVerticalHeaderLabels(['行1','行2','行3'])
self.tableWidget.setHorizontalHeaderLabels(['列1','列2','列3'])