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

Pyside6 布局管理器(3)--- 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

获取布局矩形的原点角

这些方法中尺寸因子和空白的设置在上节中已经详细的进行了解释。其他的相关方法在表中功能作用栏基本已经说明,这里不再讲解。


http://www.mrgr.cn/news/59160.html

相关文章:

  • react18中的合成事件与浏览器中的原生事件
  • 7、整数反转-cangjie
  • 科大讯飞董事长刘庆峰:赋能科研是讯飞星火的重要使命
  • torch.chunk的用法示例——非常清晰
  • springboot3.x使用@NacosValue无法获取配置信息问题解决
  • Python学习路线:从新手到专家
  • Python使用unrar遇到的问题及解决
  • API网关的作用--为什么微服务需要一个API网关?
  • 计算机网络中网络层发送报文时IP地址的变化,交换器的广播功能及相关设备功能
  • 【Nas】X-DOC:Mac mini Docker部署中国特供版Jellyfin
  • Ubuntu24.04配置samba共享
  • ubuntu22.04安装qemu-9.1并在i.MX6上运行linux kernel 6.11
  • 【创业】互联网行业30年发展史与风口,后双创时代杀出重围的独角兽们(追求极致,务实敢为)
  • SpringCloud Gateway路由核心原理解析
  • 深入理解Python异常处理机制
  • IDEA如何将一个分支的代码合并到另一个分支(当前分支)
  • GCN+BiLSTM多特征输入时间序列预测(Pytorch)
  • 使用Python的DrissonPage库自动化爬取美女图片
  • 怎么用c++的fill函数?
  • STemWin移植中文GB2312编码支持
  • 探寻闲鱼libsgmain加解密算法(4) ——JNI入口跳转
  • 前端:localStorage和浏览器的历史记录(History API)
  • Springboot 整合 Java DL4J 实现智能客服
  • [Python学习日记-57] 常用模块的练习(答案更新中)
  • 爆破(使用Burp Suite)
  • 使用anaconda3创建Python 虚拟环境