pyqt QTableWidget控件表格操作

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()信号,重写槽函数保存修改得内容

但要注意会出现:死循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值