QTableWidget控件用于设置表格形式的内容;
1、初始化QTableWidget,并设置初始行、列数:2种方法
table=QTableWidget(3,3,self)或
table=QTabelWidget()、table.setRowCount(3)、table.setColumnCount(3)
获取行、列数
table.rowCount()、table.columnCount()
2、获取某一行、某一列的行高、列宽(例如:第2行、第2列)
table.rowHeight(2)、table.columnWidth(2)
设置某一行、某一列的高、宽(例如:第2行、第2列)
table.setRowHeight(2,100)、table.setColumnWidth(2,100)
3、设置行标签和列属性
table.setVerticalHeaderLabels([‘name’,‘age’,‘weight’]) 行标签
table.setHorizontalHeaderLabels([‘name’,‘age’,‘weight’]) 列属性
行标签和列属性隐藏
table.verticalHeader().hide()、table.horizontalHeader().hide()
self.table.verticalHeader().setVisible(False)、self.table.horizontalHeader().setVisible(False)
4、合并单元格
table.setSpan(0,0,2,2) 合并第0行、第1行、第0列、第1列为1个单元格
table.setSpan(1,2,2,1) 合并第1行、第2列、第2行为1个单元格
5、添加数据
table.setEditTriggers(QAbstractItemView.NoEditTriggers) 设置所有单元格不可编辑
item = QTableWidgetItem(‘lee’) 创建单元格对象并初始化
item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) 设置当前单元格不可编辑
self.table.setItem(0,0,item) 写入第0行、第0列数据
self.table.item(0,0).text() 读取第0行、第0列数据
6、向某行、某列添加控件
self.box = QComboBox() 定义控件
self.box.addItems([‘1’,‘2’,‘3’]) 添加下拉数据
self.table.setCellWidget(0,0,self.box) 将控件添加到第0行、第0列单元格中
self.table.cellWidget(3, 4) #获取第3行,第4列得控件
7、向某行、某列添加多个控件
思路:定义容器、定义控件、布局控件到容器、添加容器到单元格
frame = QFrame() 定义控件容器
self.box1 = QComboBox() 定义2个QComboBox控件,并添加数据
self.box1.addItems([‘1’, ‘2’, ‘3’])
self.box2 = QComboBox()
self.box2.addItems([‘1’, ‘2’, ‘3’])
hbox = QHBoxLayout() 布局2个控件
hbox.addWidget(self.box1)
hbox.addWidget(self.box2)
frame.setLayout(hbox) 布局到QFrame对象中
self.table.setCellWidget(0,0,frame) 将QFrame控件添加到第0行、第0列
8、向表格中按列填充数据框架,也可以通过if row == 0等按行填充数据
for row in range(len(row_list)):
for column in range(col_list):
if column == 0:第一列
#进行第一列数据得添加和处理
item = QTableWidgetItem(row_list[row])
setItem(row,column,item)
elif column ==1:第二列
#进行第二列数据得添加和处理
item = QTableWidgetItem(row_list[row])
setItem(row, column, item)
else:
#进行第二列数据得添加和处理,如添加控件等
setCellWidget(row, column, widget)
9、设置行、列单元格自适应调整,即单元格铺满
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) 列自适应,(水平方向占满窗体)
self.table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) 行自适应,(垂直方向占满窗体)
10、显示、隐藏某一行、某一列
self.table.hideRow(1) #隐藏第一行 、self.table.hideColumn(1) #隐藏第一列
self.table.showRow(1) #显示第一行、self.table.showColumn(1) #显示第一列
11、其他一些设置
self.table.setEditTriggers(QTableWidget.NoEditTriggers) 设为不可编辑状态
self.table.setSelectionBehavior(QTableWidget.SelectRows) 选择行 SelectColumns 选择列
self.table.setSelectionMode(QTableWidget.SingleSelection) 选择单个行
self.table.setAlternatingRowColors(True) 隔行改变颜色 灰色
12、设置隔行变色,设置特定单元格背景和前景颜色
for i in range(0,self.table.rowCount(),2): 每次加2,实现隔行 前提是有数据
for j in range(self.table.columnCount()):
self.table.item(i,j).setForeground(QBrush(QColor(255,0,0))) 设置前景
self.table.item(i,j).setBackground(QBrush(QColor(255,0,0))) 设置背景
13、设置隔行变色
self.table.setPalette(QPalette(QColor(255, 0, 0))) 设置背景色颜色 红色
self.table.setAlternatingRowColors(True) 隔行变色设置
14、设置隔行变色,QSS方法 *****
QTableWidget{alternate-background-color:rgb(200,200,200);}
self.table.setAlternatingRowColors(True) 隔行变色设置
14、获取单元格内容可通过信号槽
ItemChanged()信号,重写槽函数保存修改得内容
但要注意会出现:死循环