预期功能
Qt Designer中设计表格元素,0行5列,行在程序运行过程中动态添加
表格设置
在程序中直接设定每一列的宽度:
# 参数一:列号。参数二:列宽。
self.test_table.setColumnWidth(0, 275)
self.test_table.setColumnWidth(1, 90)
self.test_table.setColumnWidth(2, 80)
self.test_table.setColumnWidth(3, 50)
self.test_table.setColumnWidth(4, 50)
当然也可以设定每一列自动拉伸:
self.test_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
或者根据内容动态调整列宽
# 根据第一列列宽为自适应为该列内容长度
self.test_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents)
代码细节
# 获取此时表格中的行数 插入一行
row_count = self.test_table.rowCount()
self.test_table.insertRow(row_count)
# 设置指定单元格的文本:新建item 设置为只读 设置悬停信息 设置item
newItem = QTableWidgetItem(text1)
newItem.setFlags(Qt.ItemIsEnabled)
newItem.setToolTip(text2)
self.test_table.setItem(row, col, newItem)
# 在指定单元格中添加控件
test_widget1 = QComboBox() # 添加QComboBox
test_widget1.addItems(["one", "two"]) # 设定下拉元素
test_widget1.setCurrentIndex(-1) # 设置默认值
self.test_table.setCellWidget(row, col, test_widget1) # 设置cellWidget
test_widget2 = QSpinBox() # 添加QSpinBox
test_widget2.setRange(0, 100) # 设置控件范围
test_widget2.setValue(50) # 设置默认值
self.test_table.setCellWidget(row, col, test_widget2) # 设置cellWidget
# 读取指定单元格文本
item_text = self.test_table.item(row, col).text()
# 读取指定单元格控件信息
cellWidget_value1 = self.test_table.cellWidget(row, col).value()
# 删除选中行
currentRow = self.test_table.currentRow() # 获取当前所选单元格的行号
# # 行号为-1表示当前没有选中,那就删除最后一行
if currentRow == -1:
self.test_table.removeRow(self.test_table.rowCount()-1)
else:
self.test_table.removeRow(currentRow)
# 删除所有行
# # 反向迭代执行删除操作(删除行)
for i in reversed(list(range((self.test_table.rowCount())))):
self.test_table.removeRow(i)
额外说明:
之所以需要反向迭代是因为正向迭代会先删除第一行,原先的第二行会变成新的第一行,这样新的第一行是无法被删除的,所以需要从表格的最底端开始删除。
这样删除的方法是直接删除单元格中的内容和单元格本身。
如果只是想清空单元格可以使用下方方法:
self.test_table.clear() # 清空所有内容,包括标题头
self.test_table.clearContents() # 清空所有内容,不包括标题头
附上自己用的QTableWidget的QSS:
QHeaderView::section{
background-color:rgb(60, 63, 65);
border:0px solid #E0DDDC;
border-bottom:1px solid #E0DDDC;
height:20px;
}
最后附上Qt Designer中QTableWidget的相关参数说明: