GUI编程--PyQt5--布局管理
创始人
2024-02-24 07:15:03

文章目录

  • 布局管理
  • 布局步骤
  • QHBoxLayout & QVBoxLayout
  • QFormLayout
  • QGridLayout

布局管理

布局,按照一定规则,将子控件放入父控件

  1. 手动布局;绝对布局move & resize & resizeEvent
  2. 布局管理器,实现快速布局,是控件的定位策略。
    在这里插入图片描述

布局步骤

  1. 创建布局对象(没有父控件)
from PyQt5.QtWidgets import QLayout, QBoxLayout, QHBoxLayout, QVBoxLayout, QGridLayoutdef set_ui(self):# 1.实例化布局对象hb = QHBoxLayout()# 2. 布局格式hb.setContentsMargins(10, 20, 30, 40) # 外边距hb.setSpacing(100)  # 子控件间距# hb.setAlignment(Qt.AlignmentFlag.AlignCenter)# 3. 添加子控件, 创建子控件没有父控件l1 = QLabel("part1")l1.setStyleSheet("background-color: lightblue;")l2 = QLabel("part2")l2.setStyleSheet("background-color: pink;")hb.addWidget(l1)hb.addSpacing(100)  # 添加空白,控制布局hb.insertSpacing(0, 100)hb.addWidget(l2)# 替换子控件hb.replaceWidget(l2, l3)  # 能实现效果就不用隐藏l2l2.hide()   # 隐藏并没有释放内存# 移除控件hb.removeWidget(l3)l3.hide()# 添加子布局vb = QVBoxLayout()...vb.addLayout(hb)vb.addWidget(l4)# 布局方向hb.setDirection(hb.direction() + 1)# 4. 父控件(QWidget对象)  添加布局,然后将布局中的子控件自动加入该父控件self.setLayout(hb)self.setLayoutDirection(Qt.LayoutDirection.RightToLeft)
  1. 设置布局格式
  2. 布局对象添加子控件,创建子控件,不需父控件
  3. 父控件设置布局格式

 

QHBoxLayout & QVBoxLayout

伸缩因子

# 伸缩窗口时
hb.addWidget(l1, 1)  # 占1份
hb.addWidget(l2, 3)   # 占3份
hb.addStretch(4)   # 4份的空白
hb.addWidget(l3, 1)  # 占1份 # 单独为一个子控件设置伸缩因子
hb.setStetchFactor(l1, 10)

在这里插入图片描述
 
 

QFormLayout

表单布局,实现如下的布局:
在这里插入图片描述

def set_ui(self):# 1.实例化布局对象fl = QFormLayout()  ## 2. 设置样式fl.setContentsMargins(10, 10, 10, 10)fl.setSpacing(5)  # 子控件之间的距离# 3. 添加子控件# 用户名 密码username = QLabel("用户名:")  # 不用父控件ule = QLineEdit()pwd = QLabel("密码:")pwd_le = QLineEdit()# 性别选择sex_label = QLabel("性别:")male = QRadioButton("男")male.clicked.connect(lambda :print("选择的性别: 男"))female = QRadioButton("女")hb = QHBoxLayout()hb.addWidget(male)hb.addWidget(female)# 登录按钮login_btn = QPushButton("登录")# 添加行fl.addRow(username, ule)  # widget, widgetfl.addRow(pwd, pwd_le)fl.addRow(sex_label, hb) # widget, layoutfl.addRow(login_btn)# fl.addRow("用户名(&n)", ule)  # 添加一行,并设置快捷键关联 alt + n # 4. 父控件 设置布局self.setLayout(fl)

 
 

插入行
formLayout.insertRow(idx, ‘爱好’, xxx)
若索引超出范围,则在最后一行插入

获取控件位置
formLayout.getWidgetPosition(username)
formLayout.getLayoutPosition(hb)
formLayout.rowCount()

设置控件
formLayout.setWidget(0, QFormLayout.LabelRole, username)
formLayout.setWidget(0, QFormLayout.FieldRole, ule)
若一行被占用,只能设置label

删除一行
fl.removeRow(0) 输入索引,删除一行并释放子控件
fl.takeRow(2) 删除一行,未释放

fl.labelForField(ule) 获取label控件

设置行标签的策略
fl.setRowWrapPolicy(QFormLayout.RowWrapPolicy.WrapAllRows) 输入框在label的下面

# 表单的对齐
fl.setFormAlignment(Qt.AlignmentFlag.AlignCenter)
# label的对齐
fl.setLabelAlignment(Qt.AlignmentFlag.AlignRight)
fl.setVerticalSpacing(50)  # 垂直方向 行间距
fl.setHorizontalSpacing(40) # 水平方向 控件间距

 
 

QGridLayout

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...