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

news2024/9/22 5:32:36

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, QHeaderView


class 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 sys

from PyQt6 import QtCore
from PyQt6.QtGui import QFont, QBrush, QColor
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableWidget, QTableWidgetItem, \
    QHBoxLayout


class 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基础教程,红色黑体

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++高阶】哈希:全面剖析与深度学习

目录 🚀 前言一: 🔥 unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二: 🔥 哈希的底层结构 ⭐ 2.1 哈希概念⭐ 2.2 哈希冲突⭐ 2.3 哈希函数⭐ 2.4 哈希冲突解决2.4.1 🌄闭散列2.4.2 &#x…

【课程系列06】某乎AI大模型全栈工程师-第6期

网盘链接 链接:https://pan.baidu.com/s/1QLkRW_DmIm1q9XvNiOGwtQ --来自百度网盘超级会员v6的分享 课程目标 【知乎大模型课程】学习的四个维度 👉指挥层:学高阶指令工程 AI编程等,指挥大模型完成90%代码任务,包…

MySql理解RR(可重复读)事务隔离级别

demo,理解mysql的可重复读隔离级别,当前读、快照读的区别 如下图,表sys_user中我同时开启三个事务连接: session1: 当session1开启事务时,mysql使用快照读保存事务开始前的数据,所以这条事务…

数据仓库及离线数仓架构、实时数仓架构

往期推荐 大数据HBase图文简介-CSDN博客 数仓常见名词解析和名词之间的关系-CSDN博客 目录 0. 前言 0.1 浅谈维度建模 0.2 数据分析模型 1. 何为数据仓库 1.1 为什么不直接用业务平台的数据而要建设数仓? 1.2 数据仓库特征 1.3 数据仓库和数据库区别 1.4 以…

VULNHUB-XXE漏洞 靶机

1.导入打开虚拟机 然后没账号密码~ 虚拟机虚拟网络编辑器是net 可以知道虚拟机的ip池 直接拿工具扫描端口 御剑 Zenmap namp 都可以 然后打开这个端口 扫描一下目录发现有个robots.txt 有个/xxe/应该是个路径 打开看看 admin.php是个文件 有个登录 试了试弱口令没办法 抓…

谁是金融核心系统市场第一名?中兴通讯旗下金篆GoldenDB

从IDC发布的《中国银行业本地部署分布式事务型数据库市场份额,2023》报告来看,中兴通讯旗下的金篆GoldenDB以24.8%的市场份额在银行业本地部署分布式数据库市场中独占鳌头,排名“第一”。    毕竟关系着人民群众的财产安全,银行…

upload-labs靶场1-19关秒杀攻略

Pass-01 打开第一关,我们先上传一个jpg文件看看这个文件上传功能正不正常 发现可以正常上传,并且访问这个图片也能正常访问,然后我们尝试上传php文件,发现弹出个警告,不让上传 我们上传php时开启抓包,发现抓…

VMware、Yum、VIM、Zsh、Oh My Zsh - 搭建属于你的虚拟机

目录 VMware 虚拟机搭建 下载 Centos7 镜像 创建虚拟机 虚拟机网络配置 常用软件配置 yum 配置 vim 安装及配置 zsh 安装 on my zsh 用起来 基本安装 插件 zsh-augosuggestions(自动补全) 插件 zsh-syntax-highlighting(语法高亮…

数据结构:二叉树(链式结构)

文章目录 1. 二叉树的链式结构2. 二叉树的创建和实现相关功能2.1 创建二叉树2.2 二叉树的前,中,后序遍历2.2.1 前序遍历2.2.2 中序遍历2.2.3 后序遍历 2.3 二叉树节点个数2.4 二叉树叶子结点个数2.5 二叉树第k层结点个数2.6 二叉树的深度/高度2.7 二叉树…

Vitis HLS 完美嵌套循环通过 m_axi 接口读取DDR 的迭代次数细粒度控制实验 — 问题描述

1 自媒体账号 目前运营的自媒体账号如下: 哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.comCSDN 【雪天鱼】: 雪天鱼-CSDN博客 QQ 学习交流群 FPGA科研硕博交流群 910055563 (进群有一定的学历门槛,长期未发言会被请出群聊,主要交流FPG…

str字符串常量,字符指针char * str的存储方式,以及如何赋值的

在使用字符指针时,第一种为通常的情况。 这次主要关注第二种情况:把字符串赋值给字符指针变量,pa中存储的不是这串字符,而是字符串的首字符的地址。 abcdef作为一个常量字符串程序会把其放在一个单独的内存区域,pa存储…

C++ Primer 总结索引 | 第十七章:标准库特殊设施

仍有一些标准库设施在很多应用中都是有用的:tuple、bitset、正则表达式以及随机数。还将介绍一些附加的I/O库功能:格式控制、未格式化I/O和随机访问 1、tuple 类型 1、tuple 是类似 pair 的模板。不同 tuple 类型的成员类型也不同,但一个 t…

基于SpringBoot+Vue的在线政务服务中心(带1w+文档)

基于SpringBootVue的在线政务服务中心(带1w文档) 本在线政务服务中心管理系统应用在线政务服务中心,数据库采用的是Mysql数据库,并且选择了java语言和SpringBoot框架进行开发项目,在项目开发过程中,实现了系统功能模块的安全性、实…

基于SpringBoot+Vue的来访管理系统(带1w+文档)

基于SpringBootVue的来访管理系统(带1w文档) 本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库[1],而java技术[2], B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤,并主要讲述了…

删除链表的倒数第N个结点(LeetCode)

题目 给你一个链表,删除链表的倒数第个结点,并且返回链表的头结点。 示例1: 输入:, 输出: 示例2: 输入:, 输出: 示例3: 输入:&#x…

HCL实验1:两台PC通过交换机ping通

2台PC机器的Ip地址必须在同一子网 PC_2的ip地址和子网掩码配置如下 PC_3的ip地址和子网掩码配置如下 将接口管理启用 在PC_2的主机上ping PC_3的ip

万科云城 科技驱动的产城融合未来开放式智慧园区

随着科技的飞速发展,产城融合正成为推动城市发展的新引擎,而智慧园区作为产城融合建设的承载体,通过云、边、端等新型基础设施的不断完善,将生产、生活等功能板块有机结合,打破物理边界,重塑科技空间与服务…

人工智能已经到来,下一步会是什么?

人工智能 (AI) 一词诞生于 1955 年,当时一小群科学家游说洛克菲勒基金会资助达特茅斯研讨会,这是一项为期两个月的项目,其目的是“找到如何让机器使用语言、形成抽象和概念、解决现在只能由人类解决的各种问题并自我完善”。 人工智能的快速…

C++ 二叉树-递归与层序遍历

二叉树的题目根据不同的题目特点需要用不同的递归算法或者层序遍历实现。 递归三要素 根据题目要求:确定递归函数的参数和返回值;根据题目要求:确定递归函数的终止返回条件;根据题目要求:确定单层的递归逻辑。 层序…

系统架构设计师体系(高级)——开篇

哈哈,架构体系终于开篇了!需要说明的是软考架构偏向于技术层面,对数据、业务和应用方向需要再开设新专栏。同时,笔者编写的内容大多基于培训、阅读和其他途径的综合整理,并不代表已经具有高级架构知识体系。希望读者可…