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的使用的更多相关文章

  1. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  2. Egret入门学习日记 --- 第十九篇(书中 8.8~8.10 节 内容)

    第十九篇(书中 8.8~8.10 节 内容) 开始 8.8节. 重点: 1.类型推断. 2.类型强制转换,使其拥有代码提示功能. 3.除了TS自带的类型判断,Egret官方也提供了类型判断的方法. 操 ...

  3. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这 ...

  4. Python开发【第十九篇】:Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  5. 【Python之路】第十九篇--Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  6. SpringBoot非官方教程 | 第十九篇: 验证表单信息

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot19/ 本文出自方志朋的博客 这篇文篇主要简述如何 ...

  7. 第十九篇 .NET高级技术之C#中的线程(一)

    原文://http://www.cnblogs.com/miniwiki/archive/2010/06/18/1760540.html 文章系参考转载,英文原文网址请参考:http://www.al ...

  8. spring-第十九篇AOP面向切面编程之增强处理的优先级

    1.从我们第十七篇举例了不同类型的增强处理. spring AOP采用和AspectJ一样的优先顺序来织入增强处理:在“进入”连接点时,具有最高优先级的增强处理将先被织入(在给定的两个Before增强 ...

  9. 第九十九篇:JS闭包

    好家伙,总是要来的,去面对那些晦涩难懂的原理,它就在那里,等着我去搞定它 首先我要去补充一些最基本的概念, 1.什么是内存? 新华字典永远的神, 但这个解释显然不够   去看看百度百科: 内存: CP ...

随机推荐

  1. 【UG二次开发】 UF_OBJ_ask_name 获取对象名字

    代码 char name[256]; UF_OBJ_ask_name(objTag, name);

  2. Redis五种基础与三种高级数据结构解析

    记得点赞+关注呦. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis 之所以能脱颖而出很大原因是他数据结构丰富,可以支持多种场景.并且 Redis 的数据结构实现以及应用场景在面 ...

  3. sentinel (史上最全+入门教程)

    文章很长,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈 为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 < Java 高并发 三部曲 > 面试必备 + 大厂 ...

  4. 合宙Luat | 一文读懂LuaTask延时,看我如何从《射雕英雄传》角度分析。

    武侠小说中,主人公之所以能纵横江湖,常常离不开一样可遇不可求的绝世法宝--武功秘籍.如今勇于尝试的开发者,笃定地告诉后来者:选Luat二次开发,就如同拥有了物联网开发的武功秘籍. 本期让我们通过< ...

  5. DOS命令行(7)——Windows网络检测与诊断

    ping ping 命令的作用是通过发送"网际控制报文协议(ICMP)"回响请求消息来验证另一台TCP/IP计算机的IP级连接状态,回响应答消息的接收情况将和返回过程的次数一起显示 ...

  6. hive学习笔记之六:HiveQL基础

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. MySQL原理 - InnoDB引擎 - 行记录存储 - Off-page 列

    本文基于 MySQL 8 在前面的两篇文章,我们分析了 MySQL InnoDB 引擎的两种行记录存储格式: Compact 格式 Redundant 格式 在这里简单总结下: Compact 格式结 ...

  8. ps 合并两张图片

    1.ps 打开第一张图片,2.打开另一张图片为图层.3.选中图层,创建蒙版: 4.点击蒙版+按Alt键,打开蒙版:5.打开蒙版后选中渐变工具,途中黑色为不显示区域,(注意渐变模式要改为正常):6.调整 ...

  9. SQL Server数据库阻塞,死锁查询

    sql 查询卡顿数据库 SELECT SPID=p.spid, DBName = convert(CHAR(20),d.name), ProgramName = program_name, Login ...

  10. DRF之过滤排序分页异常处理

    一.过滤 对于列表数据要通过字段来进行过滤,就需要添加 django-filter 模块 使用方法: # 1.注册,在app中注册 settings.py INSTALLED_APPS = [ 'dj ...