当前位置: 首页 > news >正文

入门 PyQt6 看过来(案例)18~ 表格属性

QTableWidget是常用的显示数据表格控件,是QTableView的子类,它使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象来实现的。

QTableWidget类常用方法如下表:

方法描述
setRowCount(行数)设置表格行数
setColumnCount(列数)设置表格列数
setHorizontalHeaderLabels()设置表格水平标签
setVerticalHeaderLabels()设置表格垂直标签
setItem(行,列,对象)在表格中添加控件
horizontalJeader()获取表头,以便隐藏
rowCount()获取表格的行数
columnCount()获取表格的列数
setEditTriggers(参数)设置表格是否可编辑(QAbstractItemView.EditTrigger.X):
0:NoEditTriggers0No:不能对表格内容进行编辑
1:CurrentChanged1Editing:随时都能对单元格进行修改
2:DoubleClicked2Editing:双击单元格
4:SelectedClicked4Editing:单机已选中的内容
8:EditKeyPress8Editing:当修改键被按下时修改单元格
16:AnyKeyPressed16Editing:按任意键修改单元格
31:AllEditTriggers31Editing:包括以上所有条件
setSelectionBehavior(参数)设置表格的选择行为(QAbstractItemView.SelectionBehavior.x):
0:SelectItems0Selecting:选中单个单元格
1:SelectRows1Selecting:选中一行
2:SelectColumns2Selecting:选中一列
setTextAlignment(参数)设置单元格内文字的对齐方式
AlignLeft:沿着单元格的左边缘对齐
AlignRight:沿着单元格的右边缘对齐
AlignHCenter:剧中显示在水平方向上
AlignJustify:在可用空间中对齐,默认是从左往右
AlignTop:与顶部对齐
AlignBottom:与底部对齐
AlignVCenter:在可用空间中,居中显示在垂直方向上
AlignBaseline:与基线对齐
setSpan(行,列,合并行数,合并列数)合并单元格
setShowGrid()在默认情况下(True),表格显示网格线
setColumnWidth(列,宽度)设置单元格列的宽度
setRowHeight(行,高度)设置单元格行的高度

接下来用一个案例来学习一下表格QTableWidget控件的使用,先展示基本的效果:

1 创建QTableWidget对象,设置表格为6行4列。

tableWidget=QTableWidget(6,4)

不过也可以对QTableWidget对象分别设置行和列:

tableWidget=QTableWidget()
tableWidget.setRowCount(6)
tableWidget.setColumnCount(4)

2 设置表头标签

设置表格水平表头标:

tableWidget.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])

如果想设置垂直表头标签的话,需要使用下列代码,如果不设置垂直表头,默认是1,2,3...:

tableWidget.setVerticalHeaderLabels(['A','B','C','D','E','F'])

设置后变成了A,B,C,D,E,F。

对于水平方向的表头,采用以下代码进行隐藏:

tableWidget.horizontalHeader().setVisible(False)

对于垂直方向的表头,采用下列代码进行隐藏:

tableWidget.verticalHeader().setVisible(False)

3 创建QTableWidgetItem

创建QTableWidgetItem对象,赋值并加载到表格的第0行0、1、2、3列。

        newItem=QTableWidgetItem("1A001")tableWidget.setItem(0,0,newItem)newItem=QTableWidgetItem("C++")tableWidget.setItem(0,1,newItem)newItem=QTableWidgetItem("120")tableWidget.setItem(0,2,newItem)newItem=QTableWidgetItem("6")tableWidget.setItem(0,3,newItem)

4 表格只读设置

如果想让表格只读,可以执行下列代码:

tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)

5 表格自适应

使用下列函数设置表格为自适应的伸缩模式,即可根据窗口大小来改变单元格大小。

tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)

6 设置表格选中整行

表格默认选中的是单个单元格,通过下列代码可以设置成选中整行:

tableWidget.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)

7 设置单元格的宽度、高度与所显示内容的宽度高度相匹配

tableWidget.resizeColumnsToContents()
tableWidget.resizeRowsToContents()

完整代码如下:

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 基本表格.py
Description:
Author: lzq
date:2024-07-31 22:08
------------------------------------------------
"""
import sys
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableWidget, QTableWidgetItem, \QHBoxLayout, QAbstractItemView, QHeaderViewclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.setWindowTitle("QTableWidget测试")self.resize(450,350)tableWidget=QTableWidget(6,4)tableWidget.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])tableWidget.setVerticalHeaderLabels(['A','B','C','D','E','F'])#设置表头不显示# tableWidget.horizontalHeader().setVisible(False)# tableWidget.verticalHeader().setVisible(False)#表格只读# tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)#自适应表格页面# tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)#选中一行# tableWidget.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)#设置单元格的宽度、高度与所显示内容的宽度高度相匹配tableWidget.resizeColumnsToContents()tableWidget.resizeRowsToContents()newItem=QTableWidgetItem("1A001")tableWidget.setItem(0,0,newItem)newItem=QTableWidgetItem("C++")tableWidget.setItem(0,1,newItem)newItem=QTableWidgetItem("120")tableWidget.setItem(0,2,newItem)newItem=QTableWidgetItem("6")tableWidget.setItem(0,3,newItem)hLayout=QHBoxLayout()hLayout.addWidget(tableWidget)self.setLayout(hLayout)if __name__=='__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())

8 在表格中快速定位到指定行

遍历表格查找匹配的单元格的方法:

item=self.tableWidget.findItems(text,QtCore.Qt.MatchExactly)

获取匹配的单元格行号:

row=item[0].row()

滚动到指定行以便在界面中可见:

self.tableWidget.verticalScrollBar().setSliderPosition(row)

详细实现代码如下:

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 快速定位单元格.py
Description:
Author: lzq
date:2024-07-31 22:44
------------------------------------------------
"""
import sysfrom PyQt6 import QtCore
from PyQt6.QtGui import QFont, QBrush, QColor
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableWidget, QTableWidgetItem, \QHBoxLayoutclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.initUI()def initUI(self):self.setWindowTitle("")self.resize(400, 300)#创建QTableWidget表格:10行2列tableWidget=QTableWidget()tableWidget.setRowCount(10)tableWidget.setColumnCount(2)#列变量存放10个元组数据项,每个元组包含课程名和学分项list=[('计算机导论',1),('PyQt6基础教程',2),('高等数学',2),('大学英语',3),('C++',2),('数据结构',2),('Java',3),('操作系统',2),('软件工程',4),('计算机网络',4)]#分别用每一个列表项元组0项和1项作为数据创建QTableWidgetItem对象#然后设置为表格的单元格的第0个和第1个元素for i in range(10):tableWidget.setItem(i,0,QTableWidgetItem(list[i][0]))tableWidget.setItem(i,1,QTableWidgetItem(str(list[i][1])))layout=QHBoxLayout()layout.addWidget(tableWidget)self.setLayout(layout)#查找对应的单元格,查找内容是text变量中的字符串text='PyQt6基础教程'items=tableWidget.findItems(text,QtCore.Qt.MatchFlag.MatchExactly)item=items[0]#设置定位的单元格的文本字体和颜色item.setFont(QFont("黑体",14))item.setForeground(QBrush(QColor(255,0,0)))#滚动到定位的单元格row=item.row()tableWidget.verticalScrollBar().setSliderPosition(row)if __name__=='__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())

查询出来的结果是PyQt6基础教程,红色黑体

本文至此结束,欢迎大家阅读,感谢大家点赞关注!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【MATLAB源码】机器视觉与图像识别技术实战示例文档---鱼苗面积预测计数
  • 机器学习模型选择与优化: 打造智能IDS
  • 程序员面试中的“八股文”:敲门砖还是绊脚石?
  • M12电连接器的编码分类及应用领域分析
  • 在Linux上编译软件并且运行的入门示例
  • 同城校园跑腿外卖配送平台源码,这套目前全网还没有人分享过
  • 技术学习笔记2:std::bad_cast 在多态编程中有什么作用,如何避免类型转换失败?
  • 面向未来的S2B2C电商供应链系统发展趋势与创新探索
  • 从零入门 AI for Science(AI+药物) #Datawhale AI 夏令营 Task2
  • 使用mysql 的全文检索
  • react native 和 flutter 区别
  • 汇舟问卷:从了解国外问卷工作室开始!
  • idea-常用插件
  • Git远程仓库推送
  • 视频帧的概念
  • CSS居中完全指南——构建CSS居中决策树
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Javascript弹出层-初探
  • Java精华积累:初学者都应该搞懂的问题
  • js如何打印object对象
  • Spring Boot快速入门(一):Hello Spring Boot
  • tweak 支持第三方库
  • webpack+react项目初体验——记录我的webpack环境配置
  • 电商搜索引擎的架构设计和性能优化
  • 读懂package.json -- 依赖管理
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端技术周刊 2019-02-11 Serverless
  • 什么软件可以剪辑音乐?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 第二十章:异步和文件I/O.(二十三)
  • ​configparser --- 配置文件解析器​
  • #APPINVENTOR学习记录
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (04)odoo视图操作
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (web自动化测试+python)1
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)认识微服务
  • (转)Windows2003安全设置/维护
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .NET关于 跳过SSL中遇到的问题
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • :=
  • @ConditionalOnProperty注解使用说明