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

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: Qt.FindChildOption

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&#xff…...

线性代数(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…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制&#xff0…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...