PyQt5学习日记019

一、布局管理器
1.1 概念
在这里插入图片描述
1.2 布局管理器的简单使用
先创建一个布局管理器对象,然后把所有的控件添加到布局管理器中,用布局管理器进行布局之后在放到父控件里例如:

label1 = QLabel("xx1")
label2 = QLabel("xx2")
label3 = QLabel("xx3")
label1.setStyleSheet("background:red")
label2.setStyleSheet("background:blue")
label3.setStyleSheet("background:black")
#创建垂直布局管理器
vl = QVBoxLayout()
#将子控件添加到垂直布局管理器中
vl.addWidget(label1)
vl.addWidget(label2)
vl.addWidget(label3)
#父控件应用布局后的布局管理器
self.setLayout(vl)

效果:
在这里插入图片描述
其他的功能:
在这里插入图片描述
1.3 QLayout
在这里插入图片描述
1.4 QBoxLayout
通常情况不会直接使用该类,而是使用其两个子类QHBoxlayout和QVBoxlayout。创建对象的时候不传父控件参数,只传递方向参数即可。方向参数有以下四种:
在这里插入图片描述
1.4.1 修改控件展示方向

setDirection(QBoxlayout.LeftToRight)

1.4.2 添加元素

lt.insertWidget(1,label)  #在布局管理器lt中第1个位置插入label控件
lt.insertLayout(2,LT)  #在布局管理器lt中第1个位置插入LT布局管理器
lt.layoutWidget(label) #将label控件移出lt布局管理器
label.setParent(None) #彻底将控件label移除
lt.addSpacing(100) #添加100px的空白
lt.insertSpacing(3,100)  #在布局管理器的第三个位置插入一段100px的空白

1.4.3 伸缩控制

lt.addStretch(1)  #向布局管理器添加一个宽度为1/n的空白,当窗口过小时,该空白可以被压缩消失。其中n是控件个数
lt.setStretchFactor(label,1)  #设置label的伸缩系数为1(默认状态下,所有的控件伸缩系数为0)
lt.setStretchFactor(LT,1)  #设置布局LT的伸缩系数为1(默认状态下,所有的控件伸缩系数为0)

二、表单布局

创建布局控件的时候不加父控件
2.1 添加行与插入行

 #创建控件
        name_label = QLabel("姓名:")
        name_edit = QLineEdit()

        sex_label = QLabel("性别:")
        male_rb = QRadioButton("男")
        female_rb = QRadioButton("女")
        lt = QHBoxLayout()
        lt.addWidget(sex_label)
        lt.addWidget(male_rb)
        lt.addWidget(female_rb)

        age_label = QLabel("年龄:")
        age_sb = QSpinBox()
        age_sb.setValue(23)


        #创建表单布局管理器,并把控件塞进布局管理器中
        layout = QFormLayout()
         #添加行
        layout.addRow(name_label , name_edit) #添加姓名行
        layout.addRow(lt)                     #添加性别选择行
        layout.addRow(age_label, age_sb)     #添加年龄选择行



        #调用布局管理器
        self.setLayout(layout)

效果:
在这里插入图片描述
补充:
在这里插入图片描述
插入行与添加行操作差不多,只是多了一个传入整型参数的位置来确定插入到哪一行。
在这里插入图片描述

2.2 获取行信息
行信息可能还会有一个角色的属性,一般hi有三种角色:
在这里插入图片描述

layout.rowCount() #获取布局管理器中标签总行数
layout.getWidgetPoisition(label)  #获取label的位置信息  返回一个元素(行,角色类型)
layout.getLayoutPoisition(lt)  #获取布局管理器lt的位置信息  返回一个元素(行,左/右测)

2.3 设置行

layout.setWidget(0,QFormLayout.LableRole,label)  #在第0行设置一个label标签
layout.setlayout(1,QFormLayout.FieldRole,lt)  #在第1行设置一个lt布局管理器

2.4 移除行

layout.removeRow(2)  #移除并删除第2行的控件
layout.removeRow(label)  #移除label所在的行
layout.removeWidget(lable) #仅移除label控件
layout.takeRow(1) #仅移除第2行控件,不删除(可能会影响布局,最好还是删除或隐藏)

2.5 获取标签

layout.labelForField(label) #获取label对象

2.6 行的包装策略
在这里插入图片描述
2.7 表单内容对齐方式和间距

layout.setFormAlignment(Qt.AlignVCenter | Qt.AlignLeft)   #设置水平左对齐垂直居中
layout.setLableAlignment(Qt.AlignRight)   #设置标签右对齐
layout.setVerticalSpacing(60)  #设置垂直标签距离为60px

2.8 字段增长策略
在这里插入图片描述

三、网格布局QGridLayout

3.1 创建

 label1 = QLabel("标签1")
 label1.setStyleSheet("Background :blue")
 label2 = QLabel("标签2")
 label2.setStyleSheet("Background :red")
 label3 = QLabel("标签3")
 label3.setStyleSheet("Background :yellow")
#创建网格布局控件
 gl = QGridLayout()
 gl.addWidget(label1, 0, 0) #设置label1处于第0行0列位置
 gl.addWidget(label2, 0, 1)
 gl.addWidget(label3, 1, 0, 1, 2) #设置label3处于第1行0列且宽度为1长度为2

3.2 设置行高与列高范围

gl.setColumnMinimumWidth(0,100) #设置布局控件中第0列宽度最小为100px
gl.setRowMinimumHeight(0,50) #设置布局控件中第0行最小宽度为50px
gl.setRowStretch(0,1)  #设置第0行拉伸系数为1
gl.setColumnStretch(0,0.5)  #设置第0列拉伸系数为0.5

3.3 设置控件间距

gl.setVerticalSpacing(60)  #设置gl布局控件中各子控件的垂直间距为60px
gl.settHorizonalSpacing(60)  #设置gl布局控件中各子控件的水平间距为60px

四、堆叠布局QStackLayout

设置堆叠布局时一定要按照以下步骤进行,否则会出现问题。
步骤:
1、创建一个布局管理器对象
2、把布局管理器对象设置为父控件或父布局管理器对象
3、通过布局管理器对象布局子控件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
控件尺寸策略:
在这里插入图片描述

label1.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed) #设置label1为默认大小,不可拉伸

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值