第15.13节 PyQt(Python+Qt)入门学习:Qt Designer的Spacers部件详解

1、 引言

在Designer的部件栏中,有两种类型的Spacers部件,下图中上面布局中为一个水平间隔部件(按钮1和按钮2之间的部件),下面布局中为一个垂直间隔部件(按钮3和4之间),如图:
在这里插入图片描述
这两种部件用于在布局中不一样部件间增长间隔,以辅助解决一些布局没法完美解决的部件布局排列美观问题。python

2、 Spacers部件的相关属性

2.一、概述

Spacers部件很是简单,除了名字以外只有三个属性,分别是orientation、sizeType和sizeHint。Spacers部件对应的类其实是QSpacerItem类,但从QSpacerItem类来看,除了sizeHint属性能与Designer中的部件属性相同以外,并无orientation、sizeType这两个属性。这是因为Spacers部件自己的特殊性致使的。web

2.二、orientation和sizeType属性

从引言中的图能够看出,两种Spacers部件在Designer中的部件图形表现为两种线型,水平间隔部件(Horizontal Spacer)体现为一根比较粗的横线,垂直间隔部件(Vertical Spacer)体现为一根比较粗的竖线。
对这两种部件来讲,横线对应部件在拉伸时的高度大小策略没有意义,竖线对应部件在拉伸时的宽度大小策略没有意义,所以Spacer部件的sizeType实际上就是sizePolicy,对应取值及含义也与sizePolicy同样:
在这里插入图片描述
只是sizePolicy通常是两维的(横向和纵向),而这里只有一维,具体是哪一维须要根据是横线部件仍是竖线部件来确认,而方向是来确认使用哪一维:若是是水平横向,则sizeType表示宽度的拉伸策略,若是是垂直纵向,则sizeType表示高度的拉伸策略,另外一维的拉伸策略都固定为QSizePolicy.Minimum。所以方向是仅用于确认sizeType的值是对应宽度仍是高度的大小策略,自己并无对应的单独类属性。svg

2.三、sizeHint属性

sizeHint为Qt建议部件的大小,也称为首选大小。在《PyQt(Python+Qt)学习随笔:Qt Designer中部件的三个属性sizeHint缺省尺寸、minimumSizeHint建议最小尺寸和minimumSize最小尺寸》中咱们说sizeHint为布局管理器中部件的缺省大小,该值是Qt中对每一个部件大小的建议值,也是缺省值,不能修改,但在Spacer部件中是能够修改的,这是由于Spacer部件不是从QWidget类派生的部件,这里的sizeHint也并不简单是缺省大小。布局

Spacer部件的实际大小受部件的大小策略、sizeHint以及布局中其余部件的影响,具体参考上表sizePolicy的说明。性能

3、 Spacers部件的类型和方向的关系

上面已经介绍了Spacer部件的方向确认的是部件拉伸扩展策略做用的对象是垂直高度仍是水平方向。而Spacers部件的两种类型其实就是缺省确认了两个不一样的方向,水平间隔部件(Horizontal Spacer)的方向缺省就是水平方向,垂直间隔部件(Vertical Spacer)部件的方向缺省就是垂直方向。学习

能够经过属性编辑界面的orientation来改变缺省方向,即将水平间隔部件方向改成垂直方向,垂直间隔部件部件的方向改成水平方向。方向改变后的水平间隔部件实际上就变成了垂直间隔部件,反之亦然,所以这两个部件本质上就是一种。ui

咱们经过生成的代码来对照看一下。
引言中的截图使用的间隔部件上面布局的是水平间隔部件,sizeHint被设置为(40,20),方向为水平方向,下面布局的是垂直间隔部件,sizeHint被设置为(20,40),方向为垂直方向,两者的sizeType被设置为Expanding。生成的建立Spacer部件的对应代码分别以下:spa

spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)

当两个间隔部件的方向改变以后,窗口布局变成以下:
在这里插入图片描述
生成的代码以下:.net

spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)

对比看一下代码,方向改变以后,就是部件建立时候的代码发生了两处变化:
一、 sizeHint的值的宽度和高度交换了一下值;
二、 sizePolicy的取值也发生了交换。
变换后, sizeHint的宽度变高度、高度变宽度,按默认值应该是方向指定维度变大、非指定维度变小,方向所指定的维度(即高度或宽度)的sizePolicy变动为sizeType指定值,另外一个维度固定为Minimum策略。3d

4、 Spacers部件的使用

Spacers部件是在布局中的子部件周边或部件间增长间隔的空间,使得界面布局更合理。
一、 水平方向间隔部件通常是当布局内某个能够水平拉伸的部件但愿不被拉伸时使用。
两个按钮在水平布局内水平排列,如图:
在这里插入图片描述
若是不设置间隔部件拉伸该窗口:
在这里插入图片描述
这个效果比较难看。若是在两个按钮先后都放置一个水平间隔部件,则拉伸后的效果如图:
在这里插入图片描述
此时再缩小如图:
在这里插入图片描述
能够明显看到加了间隔部件的效果要好看多了。
二、 垂直方向间隔部件通常是当布局内某个能够垂直拉伸的部件但愿不被拉伸时使用。
两个按钮垂直布局内排列如图:
在这里插入图片描述
拉伸后效果如图:
在这里插入图片描述
在垂直方向加2个垂直间隔部件后拉伸效果如图:
在这里插入图片描述
若是在窗体布局(水平布局)上再增长水平间隔部件能够获得以下效果:
在这里插入图片描述
若是再调整右下角的垂直间隔部件的sizeType为Maximum,则能够获得以下效果:
在这里插入图片描述

5、 代码实现Spacers部件的增长

若是要在一个布局内增长间隔部件,只要在生成部件的代码中适当位置增长部件生成的代码就能够,有2种方法实现。

5.一、使用spacerItem方法

spaceItem = QtWidgets.QSpacerItem(int sizeHint.width, int sizeHint.height, 
QSizePolicy.Policy widthPolicy, QSizePolicy.Policy heightPolicy)
布局.addItem(spaceItem)

5.二、使用addStretch方法

QBoxLayout.addStretch(int stretch = 0)

直接在要插入间隔部件的代码位置使用缺省值调用该方法就能够。

本节详细介绍了Qt Designer的间隔部件的属性和使用方法,并将可视部件与类QSpacerItem的对应关系进行了分析,最后给出了经过代码实现的两种方案,并给出了使用的案例。从给出的案例能够看出,间隔部件能够很好地提高布局的美观。

老猿Python,跟老猿学Python!

博文目录

博客地址