目录
2.2.1 设置间距 setContentsMargins()
2.3.1 父控件设置布局管理器 QWidget.setLayout()
2.3.2 设置方向 QWidget.setLayoutDirection()
2.3.3 取消设置方向 unsetLayoutDirection()
1 一个例子
为了引入布局管理,我们先搞一下小例子
当前我有一个窗口,窗口里有三个标签,我现在需要它们垂直排在窗口中
如果是在之前的话我们会这样写
会有很多的小问题,比如当我们改变窗口大小时会多出来一块,比如往label中加入文字,标签大小不能根据内容而改变,当然我们也有很多方法去解决这些问题,但是解决问题会增加代码量,此时我们如果使用布局管理器进行布局,则更加的便捷
- 垂直布局管理器 QVBoxLayout()
在创建三个控件之后,我们这样写
此时我们可以拉伸窗口,发现随着窗口大小,标签大小也在改变
我们也可以这样写
布局管理器继承关系是这样的
2 布局的简单使用
2.1 创建布局对象
之前我们用的是纵向布局管理器
这次我们使用横向布局管理器
我们现在查看一下所有窗口的子类
发现有一个横向布局管理器和三个标签控件
2.2 设置布局对象参数
2.2.1 设置间距 setContentsMargins()
四个参数分别是左上右下的间距,此时我将它们的间距都设为50
2.2.2 设置间隔 setSpacing()
参数为每个控件的间隔,我们现在设置间隔为20
2.2.3 设置摆放方式 setAlignment()
有三种写法
下面三个方法都涉及到Qt.Alignment这个变量,我们都使用Qt.AlignCenter中心摆放来替代
- 摆放的方式可以在70.Label 1.2中找到
- setAlignment(self,QWidget,Union[Qt.Alignment,Qt.AlignmentFlag])
我们可以设置控件内文字的摆放方式
标签1的文字在label1的中心
- setAlignment(self,QLayout,Union[Qt.Alignment,Qt.AlignmentFlag])
这个需要嵌套,我们现在搞一个垂直的布局管理器套在水平的布局管理器中
我们增加label4和label5两个标签
然后创建一个竖直布局管理器之后把这两个标签放进去
然后再把竖直布局管理器放进水平布局管理器中
现在的状态是这样的
我们此时让竖直布局管理器的控件摆放在竖直布局管理器中心
- setAlignment(self,Union[Qt.Alignment,Qt.AlignmentFlag])
我们此时直接对水平管理器设置摆放位置
2.3 设置给需要布局的控件父控件或调整方向
2.3.1 父控件设置布局管理器 QWidget.setLayout()
这个在之前就使用过,我在这里就提一下
此时我删除前面所有的布局对象参数,此时的窗口是这样的
2.3.2 设置方向 QWidget.setLayoutDirection()
括号内有三个值可以填
- Qt.LeftToRight 从左到右
- Qt.RightToLeft 从右到左
- Qt.LayoutDirectionAuto 自动判断
- 从左到右和从右到左对数值布局管理器没有影响,但是不会报错
- 竖直的我不知道该怎么调整顺序
我们现在搞一下水平管理器从右到左
2.3.3 取消设置方向 unsetLayoutDirection()
刚刚设置过,我们现在把它取消掉
3 布局的详细使用
布局管理器的继承图是上面这个样子的
这个我们拆到下面的若干小结来讲