第十九篇 -- QTableWidget的使用
QTableWidget的一些常用方法
下面两个类可以根据自己的情况自定义。
单元格类型的类:
class CellType(Enum):
ctKey = 1000
ctPath = 1001
ctInfo = 1002
单元格列的类:
class FieldColNum(Enum):
colKey = 0
colPath = 1
colInfo = 2
一、设置TableWidget的表头
headerItem = QTableWidgetItem("要写入单元格里的内容")
self.ui.tableWidget.setHorizontalHeaderItem(列数序号, headerItem)
二、设置TableWidget行数
self.ui.tableWidget.setRowCount(行数)
三、设置TableWidget单元格内容
item = QTableWidgetItem("单元格内容", 单元格类型) # CellType.ctKey.value
self.ui.tableWidget.setItem(行序号, 列序号, item)
四、插入、添加、删除
curRow = self.ui.tableWidget.currentRow() # 当前行号
self.ui.tableWidget.insertRow(curRow) # 插入行 curRow = self.ui.tableWidget.rowCount()
self.ui.tableWidget.insertRow(curRow) # 添加行 curRow = self.ui.tableWidget.currentRow() # 当前行号
self.ui.tableWidget.removeRow(curRow) # 删除行
五、自动调整行高、自动调整列宽
self.ui.tableWidget.resizeRowsToContents() # 自动调整行高
self.ui.tableWidget.resizeColumnsToContents() # 自动调整列宽
六、是否可编辑
self.ui.tableWidget.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.SelectedClicked) # 可编辑
self.ui.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) # 不可编辑
七、是否显示行表头,是否显示列表头。True代表是,False代表不显示
self.ui.tableWidget.horizontalHeader().setVisible(True) # 显示行表头
self.ui.tableWidget.verticalHeader().setVisible(True) # 显示列表头
八、行选择、单元格选择
self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows) # 行选择
self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectItems) # 单元格选择
九、清空表格内容
self.ui.tableWidget.clearContents()
十、读取单元格内容
item = self.ui.tableWidget.item(行序号, 列序号)
content = item.text() # 获取单元格内容
status = item.checkState() # 获取单元格状态,Qt.Checked或者Qt.Unchecked
十一、间隔行变色
self.ui.tableWidget.setAlternatingRowColors(True) # 变色
self.ui.tableWidget.setStyleSheet("alternate-background-color: rgb(197, 197, 197);")
十二、设置列宽。参考链接:https://blog.csdn.net/baidu_37503452/article/details/104225719
self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.ui.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Interactive)
十三、在一个单元格中插入一个button
btn_path_select = QPushButton("...")
self.ui.tableWidget.setCellWidget(j, 1, btn_path_select)
效果图:

十四、在一个单元格中插入两个控件
label_path_select = QLabel(“\路径\test.py”)
btn_path_select = QPushButton("...")
btn_path_select.setMaximumWidth(40)
cell_widget = QWidget()
box_layout = QHBoxLayout(cell_widget)
box_layout.addWidget(label_path_select)
box_layout.addWidget(btn_path_select)
box_layout.setContentsMargins(0, 0, 0, 0)
self.ui.tableWidget.setCellWidget(j, 1, cell_widget)
效果图:

十五、设置单元格中button按钮的单击事件
def do_btn_path_select_clicked(self):
sender_obj = self.sender()
cell_widget = sender_obj.parent()
# print(cell_widget.children()[1])
cell_idx = self.ui.tableWidget.indexAt(QPoint(cell_widget.frameGeometry().x(), cell_widget.frameGeometry().y()))
cell_row = cell_idx.row()
cell_column = cell_idx.column()
# 单元格的行和列
print(cell_row, cell_column)
if sender_obj is None:
pass
else:
idx = self.ui.tableWidget.indexAt(QPoint(sender_obj.frameGeometry().x(), sender_obj.frameGeometry().y()))
# button的行和列
row = idx.row()
column = idx.column()
if column == 1:
filename, flt = QFileDialog.getOpenFileName(self, "选择一个或多个文件", "", "All Files (*);;Text Files (*.txt)")
cell_widget.children()[1].setText(filename)
效果图:

十六、设置QTableWidget的单击事件
def do_table_widget_clicked(self, index):
table_column = index.column()
table_row = index.row()
# current_item = self.ui.tableWidget.item(table_row, table_column)
current_widget = self.ui.tableWidget.cellWidget(table_row, table_column)
path_label_obj = current_widget.children()[1]
path_button_obj = current_widget.children()[2]
# print(path_label_obj.text())
path_label_obj.setText("已单击此单元格")
效果图:

十七、单击单元格cellWidget事件
def do_table_widget_cell_clicked(self, row, column):
current_widget = self.ui.tableWidget.cellWidget(row, column)
path_label_obj = current_widget.children()[1]
path_label_obj.setText("已单击此单元格")
效果图同十六是一样的。
关于TableWidget的一些基本设置说完了以后,下面就了解一下可能值得注意的点。
首先,关于splitter的比例问题。在右侧,QTableWidget和QPlainTextEdit两个组件刚布局为splitter时,两个的比例是1:1,如果想要按照自己的比例调整大小,怎么办呢。

先选中QTableWidget,在其属性那里找到Vertical Stretch属性,这里设置为6,同样,选中QPlainTextEdit,在其属性里找到那个属性,设置为4。那么这两个控件高度的比例就为6:4了。
第二个就是关于那个隔行变色的功能了,原始的是白色和灰色,效果并不明显,所以我自己修改了颜色,对比度更大一点。

找到styleSheet属性,点击右边的那三个点。

选择Add Color --》alternate-background-color,然后选择一个自己喜欢的颜色就好了。
第十九篇 -- QTableWidget的使用的更多相关文章
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
- Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)
第十九篇(书中 8.8~8.10 节 内容) 开始 8.8节. 重点: 1.类型推断. 2.类型强制转换,使其拥有代码提示功能. 3.除了TS自带的类型判断,Egret官方也提供了类型判断的方法. 操 ...
- Android UI开发第三十九篇——Tab界面实现汇总及比较
Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...
- Python开发【第十九篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- 【Python之路】第十九篇--Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- SpringBoot非官方教程 | 第十九篇: 验证表单信息
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot19/ 本文出自方志朋的博客 这篇文篇主要简述如何 ...
- 第十九篇 .NET高级技术之C#中的线程(一)
原文://http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html 文章系参考转载,英文原文网址请参考:http://www.al ...
- spring-第十九篇AOP面向切面编程之增强处理的优先级
1.从我们第十七篇举例了不同类型的增强处理. spring AOP采用和AspectJ一样的优先顺序来织入增强处理:在“进入”连接点时,具有最高优先级的增强处理将先被织入(在给定的两个Before增强 ...
- 第九十九篇:JS闭包
好家伙,总是要来的,去面对那些晦涩难懂的原理,它就在那里,等着我去搞定它 首先我要去补充一些最基本的概念, 1.什么是内存? 新华字典永远的神, 但这个解释显然不够 去看看百度百科: 内存: CP ...
随机推荐
- UF_MTX 矩阵操作
Open C UF_MTX2_copyUF_MTX2_determinantUF_MTX2_identityUF_MTX2_initializeUF_MTX2_multiplyUF_MTX2_mu ...
- Mysql_SQLyog 数据库的创建
1.创建数据库 CREATE DATABASE [IF NOT EXISTS] westos; 2.删除数据库 DROP DATABASE [IF EXISTS] westos; 3.使用数据库 -- ...
- 整合Spring Cloud Stream Binder与GCP Pubsub进行消息发送与接收
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<整合Spring Cloud Stream Binder与RabbitMQ进行消息发送与接收& ...
- Android Studio使用Gradle引入第三方库文件
原文链接:https://blog.csdn.net/qiutiandepaomo/article/details/81538937 使用AndroidStudio开发Android应用的时候,会经常 ...
- 技术如何转产品01——1+1>2?
当业务复杂到一定阶段的时候,效率问题会首当其冲,基本解法是化整为零.分赛道,对应的产物可以是子公司>>事业部>业务单元>项目组. 好处是目标聚焦.所以问题也会聚焦,工作内容闭 ...
- 温故知新,.Net Core遇见Postman(API Development),进阶分布式微服务高效调式
什么是Postman 环境变量(Environments) 全局协议 描述 变量 初始值 当前值 请求协议 request_protocol http http 授权信息 描述 变量 初始值 当前值 ...
- 第4章:kubectl命令行管理工具
kubectl --help 查看帮助信息 kubectl create --help 查看create命令帮助信息 命令 描述 create 通过文件名或标准输入创建资源 expose 将一个资源公 ...
- vue3,后台管理列表页面各组件之间的状态关系
技术栈 vite2 vue 3.0.5 vue-router 4.0.6 vue-data-state 0.1.1 element-plus 1.0.2-beta.39 前情回顾 表单控件 查询控件 ...
- 其他:什么是元数据?(Metadata)?
元数据 任何文件系统中的数据分为数据和元数据.数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限.文件拥有者以及文件数据块的分布信息(inode...)等等 ...
- springboot集成swagger添加消息头(header请求头信息)
springboot集成swagger上篇文章介绍: https://blog.csdn.net/qiaorui_/article/details/80435488 添加头信息: package co ...