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 sys

class 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

获取布局矩形的原点角

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值