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. 视频质量评估学习Note

    术语"编解码器 Coder/Decoder"是压缩器/解压缩器或编码器/解码器一词的缩写.顾名思义,编码可使视频文件变小以进行存储,然后在需要再次使用时将压缩后的数据转换成可用的图 ...

  2. 【NX二次开发】Block UI 枚举

    属性: 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  3. codeforeces 845B

    题解 codefores 845B 原题 Luba has a ticket consisting of 6 digits. In one move she can choose digit in a ...

  4. 连接过的WiFi改了密码之后再次连接不让输入新密码还是用旧密码一直显示连接失败

    设置---网络和Internet---WLAN----管理已知网络----忘记    根据这个步骤就能忘记密码,重新输入新密码了.

  5. 使用pdb进行Python调试

    调试应用有时是一个不受欢迎的工作,当你长期编码之后,只希望写的代码顺利运行.但是,很多情况下,我们需要学习一个新的语言功能或者实验检测新的方法,从而去理解其中运行的机制原理. 即使不考虑这样的场景,调 ...

  6. match、vlookup、hlookup函数(结合index运用可以实现自动化填充)

    1.match返回查找值位置: match(lookup_value, lookup_array, match_type) Match(目标值,查找区域,0/1/-1) 使用注意:返回值是基于选择区域 ...

  7. upload-labs通关记录

    upload-labs通关记录 一句话木马解读 一般的解题步骤 或者可以直接用字典爆破一下 https://github.com/TheKingOfDuck/fuzzDicts/blob/master ...

  8. MySQL数据库复制技术应用实战(阶段二)

    MySQL数据库复制技术应用实战(阶段二)文档 作者 刘畅 时间 2020-9-27 服务器版本:CentOS Linux release 7.5.1804 主机名 ip地址 服务器配置 安装软件 密 ...

  9. Python | 更换pip源到国内镜像

    pip国内的一些镜像 阿里云 https://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simpl ...

  10. Datahub 0.8.5发布! 通用的元数据搜索和发现工具

    近期Datahub 发布了最新的版本0.8.5,作为LinkedIn开源的通用的元数据搜索和发现工具.Datahub近一年来有了巨大的发展,也成为了很多公司进行元数据管理的调研方向并进行使用的选择. ...