布局中添加弹簧
页面ui设计的时候,经常需要使用QSpacerItem 来辅助我们完成界面的布局。
在QT Designer界面中,QSpacerItem对应WiggetBox栏中的Spacers子项,并分成Horizontal Spacer 和 Vertical Spacer两种形式,并相应地用水平和垂直的"弹簧"图标来表示,这两个"弹簧"图标形象地表示了Horizontal Spacer和 Vertical Spacer作用,即在我们调整窗口尺寸时,分别在水平和垂直方向上将窗口中的部件推到我们期望的位置。
在代码中使用Spacer的方式有两种:
方式一:通常,不需要直接使用这个类。Qt的内置布局管理器提供了以下函数来操作布局中的空白区域:
布局类 | 添加Spacer |
---|---|
QHBoxLayout | addSpacing(size:int)添加固定长度的占位空间 addStretch(stretch:int=0)添加可伸缩空间 insertSpacing(index: int,size:int)根据索引插入固定长度的占位空间 insertStretch(index:int,stretch:int=0)根据索引插入可伸缩的空间 |
QGridLayout | setRowMinimumHeight(row:int,minSize:int)设置行最小高度 setRowStretch(row:int,stretch;int) 设置行的伸缩系数 setColumnMinimumWidth(column:int,minSize: int)设置列最小宽度 setColumnStretch(column:int,stretch;int) 设置列的伸缩系数 |
方法二,使用QSpacerItem创建水弹簧或(和)垂直弹簧,使用布局管理器的addItem方法将其添加到需要的位置。
from PySide6.QtWidgets import QSpacerItem
QSpacerItem(w: int,
h: int,
hData: PySide6.QtWidgets.QSizePolicy.Policy = Instance(PySide6.QtWidgets.QSizePolicy.Minimum),
vData: PySide6.QtWidgets.QSizePolicy.Policy = Instance(PySide6.QtWidgets.QSizePolicy.Minimum))-> None
QSpacerItem包含以下方法:
方法 | 描述 |
---|---|
changeSize(w: int,h: int[,hData=QSizePolicy.Minimum[,vData=QSizePolicy.Minimum]]) | 将此间隔项更改为首选宽度w,首选高度h,水平大小策略hPolicy和垂直大小策略vPolicy。 默认值提供了一个可以拉伸的间隙,如果没有其他需要这个空间的话。 注意,如果在将间隔项添加到布局之后调用changeSize(),则必须使布局无效,以使间隔项的新大小生效。 |
sizePolicy()–>PySide6.QtWidgets.QSizePolicy | 返回该项的大小策略。QSizePolicy是描述水平和垂直大小调整策略的布局属性 |
QSizePolicy可取以下值:
QSizePolicy枚举值 | 描述 |
---|---|
QSizePolicy.Fixed | sizeHint()是唯一可接受的替代方案,因此小部件永远不会增长或缩小(例如按钮的垂直方向)。 |
QSizePolicy.Minimum | sizeHint()是最小的,但足够了。小部件可以展开,但更大没有优势(例如按钮的水平方向)。它不能小于 sizeHint()提供的大小。 |
QSizePolicy.Maximum | sizeHint()是最大值。如果其他小部件需要空间(例如分隔线),小部件可以缩小任何数量而不会造成损害。它不能大于 sizeHint()提供的大小。 |
QSizePolicy.Preferred | sizeHint()是最好的,但小部件可以缩小,但仍然有用。小部件可以展开,但它大于 sizeHint()(默认的 QWidget策略)没有任何优势。 |
QSizePolicy.Expanding | sizeHint()是一个合理的大小,但小部件可以缩小并且仍然有用。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如水平滑块的水平方向)。 |
QSizePolicy.MinimumExpanding | sizeHint()是最小的,但足够了。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如水平滑块的水平方向)。 |
QSizePolicy.Ignore | sizeHint()被忽略。小部件将获得尽可能多的空间。 |