当前位置: 首页 > 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…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...