Pyside6 布局管理器(4)--- QGridLayout的使用
一、QGridLayout的介绍(官翻)
QGridLayout 获得可用的空间(由其父布局或 parentWidget() 提供),将其划分为行和列,并将其管理的每个小部件放入正确的单元格中。
列和行的行为是相同的;我们将讨论列,但行也有等效的功能。
每列都有最小宽度和拉伸系数。最小宽度是使用 setColumnMinimumWidth() 设置的宽度和该列中每个小部件的最小宽度中的最大值。拉伸因子使用setColumnStretch()设置,并确定列将获得多少可用空间,超过其必要的最小值。
通常,每个托管控件或布局都使用 addWidget() 放入自己的单元格中。通过使用 addItem() 和 addWidget() 的行和列跨度重载,小部件也可以占用多个单元格。如果你这样做,QGridLayout会猜测如何在列/行上分配大小(基于拉伸因子)。
要从布局中删除小部件,请调用 removeWidget() 。在 widget 上调用 hide() 也会有效地从布局中删除该 widget,直到调用 show()。
此图显示了具有五列三行网格的对话框的一部分(网格以洋红色显示):

此对话框片段中的第0、2和4列由一个QLabel、一个QLineEdit和一个QListBox组成。第1列和第3列是用setColumnMinimumWidth() 制作的占位符。第0行由三个QLabel对象组成,第1行由三个QLineEdit对象组成,第2行由三个QListBox对象组成。我们使用占位符列(1和3)来获得列之间的正确空间量。
请注意,列和行的宽度或高度并不相等。如果你想让两列具有相同的宽度,你必须自己将它们的最小宽度和拉伸系数设置为相同。可以使用 setColumnMinimumWidth() 和 setColumnStretch() 来执行此操作。
如果 QGridLayout 不是顶级布局(即不管理所有窗口小部件的区域和子窗口小部件),则必须在创建它时,但在对其进行任何操作之前,将其添加到其父布局中。添加布局的正常方法是在父布局上调用 addLayout()。
添加布局后,您可以使用 addWidget()、 addItem() 和 addLayout() 将小部件和其他布局放入网格布局的单元格中。
QGridLayout还包括两个边距宽度:内容边距和间距()。内容边距是沿 QGridLayout 四边预留空间的宽度。间距()是相邻方框之间自动分配的间距的宽度。
默认的内容边距值由样式提供。Qt样式指定的默认值是子控件为9,窗口为11。间距默认值与顶级布局的边距宽度相同,或与父布局相同。。
二、QGridLayout的相关方法
1.QGridLayout的创建及基本使用
| API函数 | 参数说明 | 返回值 | 功能作用 |
| QGridLayout(self,parent) | parent:QWidget | None | 创建网格布局实例 |
| addWidget(self,w,row,column, rowspan=None,columnspan=None, alignment=Deafult(Qt.Alignment)) | w:QWidget row:int column:int rowspan:int column:int alignmen:Qt.Alignmen | None | 按照行列索引位置添加控件 |
| addLayout(self,l,row,column, rowspan=None,columnspan=None, alignment=Deafult(Qt.Alignment)) | w:l row:int column:int rowspan:int column:int alignmen:Qt.Alignmen | None | 按照行列索引位置添加子布局 |
行、列的索引均从0开始,最上面一行为第0行,而非第1行;最左侧一列为第0列,而非第1列。
rowspan和columnspan两个参数的意义是,加入的这个控件所占位置跨几行或几列。比如下例中的日历控件,其columnspan=2,即其站一行两列的位置。好比我们在excel中将一行的两个列单元格合并形成的控件分配给日历控件。
Alignment参数针对控件内容的对齐方式,通常不做设置。
example:
from PySide6.QtWidgets import QWidget,QApplication,QGridLayout,QPushButton,
QLabel,QLineEdit,QCalendarWidget
from PySide6.QtCore import Qt
import sysclass MyWindow(QWidget):def __init__(self):super(MyWindow, self).__init__()# 创建一个网格布局lay = QGridLayout(self)# 创建2各标签、2个单行文本框、2个按钮和1个日历控件lab1 = QLabel("账号:")lab2 = QLabel("密码:")line1 = QLineEdit()line2 = QLineEdit()calendar_1 = QCalendarWidget()btn1 = QPushButton("确定")btn2 = QPushButton("取消")# 将控件通过索引放置相应位置中lay.addWidget(lab1, 0, 0, Qt.AlignmentFlag.AlignRight)lay.addWidget(line1, 0, 1)lay.addWidget(lab2, 1, 0, Qt.AlignmentFlag.AlignRight)lay.addWidget(line2, 1, 1)lay.addWidget(btn1, 2, 0)lay.addWidget(btn2, 2, 1)lay.addWidget(calendar_1,3,0,1,2)if __name__ == '__main__':app = QApplication(sys.argv)win = MyWindow()win.show()sys.exit(app.exec())
运行结果:

2.QGridLayout的其他相关方法
| API函数 | 参数说明 | 返回值 | 功能作用 |
| setGeometry(self, arg__1) | arg_1:QRect | None | 设置网格布局大小 |
| setRowMinimumHeight(self, row, minSize) | row:int minSize:int | None | 设置索引行的最小行高 |
| rowMinimumHeight(self, row) | row:int | int | 获取索引行的最小行高 |
| setColumnMinimumWidth(self, column, minSize) | column:int minSize:int | None | 设置索引行的最小行高 |
| columnMinimumWidth(self, column) | column:int | int | 获取索引行的最小行高 |
| setContentsMargins(self, left, top, right, bottom) | left:int top:int ringhtLint bottom:int | None | 设置布局的内容边距(参数为左上右下的尺寸) |
| setContentsMargins(self, margins) | margins:QMargin | None | 设置布局的内容编剧(参数为QMargin对象) |
| getContentsMargins(self): | None | tupe(left,top, right,bottom) | 以元组形式返回布局内容边距的四边值 |
| contentsMargins(self) | None | QMargin | 获取一个布局的内容边距 |
| unsetContentsMargins(self) | None | None | 取消设置布局周围的任何用户定义的边距。布局将使用样式提供的默认值。 |
| setsapcing(self,spacing) | spacing:int | None | 设置布局控件间的空白间距(水平及垂直) |
| spacing(self) | None | spacing:int | 获取布局控件间的空白间距(水平及垂直) |
| setHorizontalSpacing(self, spacing) | spacing:int | None | 设置布局控件间的水平空白间距(列间距) |
| setVerticalSpacing(self, spacing) | spacing:int | None | 设置布局控件间的垂直空白间距(行间距) |
| setRowStretch(self, row, stretch) | row:int stretch:int | None | 设置索引行的伸缩因子 |
| rowStretch(self, row) | row:int | stretch:int | 获取索引行的伸缩因子 |
| setColumnStretch(self, column, stretch) | column:int stretch:int | None | 设置索引列的伸缩因子 |
| columnStretch(self, column) | column:int | stretch:int | 获取索引列的伸缩因子 |
| cellRect(self, row, column) | row:int column:int | QRect | 返回索引位置的单元格矩形 |
| count(self) | None | int | 获取布局内控件数量 |
| rowCount(self) | None | Int | 获取布局行数 |
| columnCount(self) | None | Int | 获取布局列数 |
| getItemPosition(self, idx) | idx:int | tuple(row:int column:int rowspan:int columnspan:int) | 通过条目索引获取该位置的信息,返回值是一个包含行、列、跨行数、跨列数的元组 |
| itemAtPosition(self, row, column) | row:int column:int | QLayoutItem | 返回索引位置的条目对象 |
| removeWidget(self,w) | w:QWidget | None | 移除布局的子控件w |
| replaceWidget(from,to,option) | from:QWidget to:QWidget option为枚举类 | QLayoutItem | 搜索小部件from并将其替换为小部件to。成功时返回包含小部件的布局项。否则返回None。 返回的布局项不再属于该布局,应该删除或插入到另一个布局中。小部件from不再由布局管理,可能需要删除或隐藏。widget from的父类保持不变。 此函数适用于内置Qt布局,但可能不适用于自定义布局。 |
| setOriginCorner(self, arg__1) | arg_1:Qt.Corner Qt枚举类 | None | 设置布局矩形的原点角 |
| originCorner(self) | None | Qt.Corner | 获取布局矩形的原点角 |
这些方法中尺寸因子和空白的设置在上节中已经详细的进行了解释。其他的相关方法在表中功能作用栏基本已经说明,这里不再讲解。
相关文章:
Pyside6 布局管理器(4)--- QGridLayout的使用
一、QGridLayout的介绍(官翻) QGridLayout 获得可用的空间(由其父布局或 parentWidget() 提供),将其划分为行和列,并将其管理的每个小部件放入正确的单元格中。 列和行的行为是相同的;我们将…...
从GPT定制到Turbo升级再到Assistants API,未来AI世界,你准备好了吗?
引言 在OpenAI DevDay发布会上,OpenAI再次震撼整个人工智能行业,为AI领域带来了重大的更新。CEO Sam Altman宣布推出了定制版本的ChatGPT,这意味着用户现在可以根据自己的需求打造个性化的GPT,并分享至GPT Store。这一消息对于受…...
「漏洞复现」BladeX企业级开发平台 tenant/list SQL 注入漏洞复现(CVE-2024-33332)
0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…...
基于SSM的消防物资存储系统【附源码】
基于SSM的消防物资存储系统 效果如下: 用户功能界面 仓库管理界面 物资入库管理界面 物资出库管理界面 物资详情管理界面 报警通知管理界面 安全检查提醒管理界面 管理员功能界面 研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网…...
Pseudo Multi-Camera Editing 数据集:通过常规视频生成的伪标记多摄像机推荐数据集,显著提升模型在未知领域的准确性。
2024-10-19,由伊利诺伊大学厄巴纳-香槟分校和香港城市大学的研究团队提出了一种创新方法,通过将常规视频转换成伪标记的多摄像机视角推荐数据集,有效解决了在未知领域中模型泛化能力差的问题。数据集的创建,为电影、电视和其他媒体…...
认识一下 Mochi-1--最新的免费开源人工智能视频模型
Genmo 是一家专注于视频生成的人工智能公司,该公司宣布发布 Mochi 1 的研究预览版。Mochi 1 是一种新的开源模型,可根据文本提示生成高质量视频,其性能可与 Runway 的 Gen-3 Alpha、Luma AI 的 Dream Machine、Kuaishou 的 Kling、Minimax 的…...
Spring 的事务传播机制
Spring 的事务传播机制定义了一个事务方法在遇到已经存在的事务时如何处理。事务传播属性(Propagation)提供了七种机制,以适应不同的业务需求和事务边界管理。 1. Spring 的事务传播机制的类型 (1)REQUIREDÿ…...
线性代数(1)——线性方程组的几何意义
线性代数的基本问题是求解个未知数的个线性方程; 例如:(方程1)。 在线性代数的第一讲中,我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…...
写给自己的一些心得体会
为什么是CSDN??? 最近跑实验跑得绝望,感觉自己兜兜转转走了太多太多的弯路,我不知道这样的弯路什么时候是个尽头,就像在USJ排队,看似好像要到入口了,实则一转头还是无尽绵延的队伍。走了这么多弯路,总要…...
论文阅读(二十九):Multi-scale Interactive Network for Salient Object Detection
文章目录 Abstract1.Introduction2.Scale VariationProposed Method3.1Network Overview3.2Aggregate Interaction Module3.3 Self-Interaction Module3.4Consistency-Enhanced Loss 4.Experiments4.1Implementation Details4.2 Comparison with State-of-the-arts4.3Ablation …...
常见存储器及其特点
: 一、只读存储器(ROM)及其类型 1. ROM 特点:存储的数据固定不变,只能读出不能写入,且断电后数据不丢失。应用:通常用于存储系统程序,如BIOS等。 2. PROM(可编程只读…...
《向量数据库指南》——text-embedding-3-large与Mlivus Cloud打造语义搜索新纪元
使用text-embedding-3-large生成向量并将向量插入Mlivus Cloud实现高效语义搜索的深度解析与实战操作 在数字化时代,数据的处理和存储方式正在经历前所未有的变革。特别是随着大数据和人工智能技术的快速发展,向量数据库作为一种新型的数据存储和查询方式,正逐渐受到越来越…...
通过 Bytebase API 查看数据库审计日志
原文地址代码库 Bytebase 是一款数据库 DevOps 和 CI/CD 工具,专为开发者、DBA 和平台工程团队设计。虽然它提供了直观的 GUI 来管理数据库 schema 变更和访问控制,但有些团队可能希望使用 Bytebase API 将 Bytebase 集成到现有的 DevOps 平台中。 在之…...
# 渗透测试# 1.安全见闻(6)通讯协议
安全见闻6 通讯协议 ##B站陇羽Sec## 潜在的安全问题所涉及的领域 无线电安全,协议分析,web渗透,逆向分析 通讯协议涉及的安全主要包括以下几个方面: 1.1 保密性问题 …...
[Gdiplus/Gdi]_[中级]_[实现多行文本的多种颜色绘制-富文本绘制]
场景 在开发WTL/WIN32界面程序时,有时候需要绘制多行的段落文本,但是文本里的数值需要设置红色以便能让人第一时间关注到它。这种文本可以称之为富文本。GDI的DrawText和GDIPlus的DrawString方法都只能连续绘制某个颜色的文本。怎么实现?说明 在《绘图实现单行文本的多种颜色…...
Ubuntu如何创建一个子用户并赋与管理员权限
在Ubuntu操作系统中,如何创建一个子用户并赋与管理员权限 一、创建用户 sudo useradd -m -s /bin/bash test详细解释: sudo:以超级用户(root)权限执行该命令。useradd 命令通常需要管理员权限,因此需要加上 sudo。 useradd:创建新用户的命令。 -m:指示系统为新用户创建…...
【Linux | IO多路复用】epoll的底层原理详解
epoll 是一种高效的 I/O 多路复用机制,广泛用于 Linux 系统中,用于处理大量并发的文件描述符。它比传统的 select 和 poll 方法具有更好的性能,特别是在处理大量并发连接时。 1.epoll的设计思路 epoll是在select 出现 N 多年后才被发明的&a…...
npm run serve 提示异常Cannot read property ‘upgrade‘ of undefined
npm run serve 提示Cannot read property ‘upgrade’ of undefined 一般是proxy的target代理域名问题导致的,如下: 解决方案: proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题,会导致…...
Muggle OCR 是一个高效的本地OCR(光学字符识别)模块
Muggle OCR 是一个高效的本地OCR(光学字符识别)模块,专为“麻瓜”设计,用于简化文本识别的过程。这个模块特别适用于处理印刷文本和解析验证码1。 以下是一些关于 Muggle OCR 的主要特点和使用方法: 特点:…...
【SpringBoot】万字源码解析——启动流程
Spring Boot启动流程 Spring Boot 的入口类: SpringBootApplication public class IntelGradingApplication {public static void main(String[] args) {SpringApplication.run(IntelGradingApplication.class, args);} }Spring Boot 的启动过程可以分为两方面&am…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...
Linux信号保存与处理机制详解
Linux信号的保存与处理涉及多个关键机制,以下是详细的总结: 1. 信号的保存 进程描述符(task_struct):每个进程的PCB中包含信号相关信息。 pending信号集:记录已到达但未处理的信号(未决信号&a…...
PostgreSQL 对 IPv6 的支持情况
PostgreSQL 对 IPv6 的支持情况 PostgreSQL 全面支持 IPv6 网络协议,包括连接、存储和操作 IPv6 地址。以下是详细说明: 一、网络连接支持 1. 监听 IPv6 连接 在 postgresql.conf 中配置: listen_addresses 0.0.0.0,:: # 监听所有IPv4…...
