PyQt5 有四种布局:水平(QHBoxLayout)、竖直(QVBoxLayout)、网格(QGridLayout)、表单(QFormLayout)

在窗体中单一的布局应该不难,但若是比较复杂的布局,一般涉及到布局的嵌套,这就头疼了。

本文的四个知识点:

1. 布局不能直接嵌套(如果我错了,欢迎指正!)

2. 内层的布局必须先“附着”在一个空 QWidget 上

3. 然后把这个“承载”着内层布局的空部件添加至外层布局

4. 最后,别忘记把全局布局“附着”到窗体本尊

0. 先看效果图

下面对布局进行分析

1. 全局布局分析

全局布局使用了一个水平布局

wlayout = QtWidgets.QHBoxLayout()

2. 局部布局分析

四个局部布局分别使用了水平布局、竖直布局、网格布局、表单布局

hlayout = QtWidgets.QHBoxLayout()

vlayout = QtWidgets.QVBoxLayout()

glayout = QtWidgets.QGridLayout()

flayout = QtWidgets.QFormLayout()

到这里,其实开始时我产生了一个很自然,但是错误的想法:把四个局部布局直接添加到全局布局内:

wlayout.addWidget(hlayout)

wlayout.addWidget(vlayout)

wlayout.addWidget(glayout)

wlayout.addWidget(flayout)

报错信息提示:addWidget() 参数必须为 QWidget 类型!

这给了我启示:

先准备四个 QWidget: hwg, vwg, gwg, fwg

hwg = QtWidgets.QWidget()

vwg = QtWidgets.QWidget()

gwg = QtWidgets.QWidget()

fwg = QtWidgets.QWidget()

然后用这四个 QWidget 分别去设置前面四个局部布局

hwg.setLayout(hlayout)

vwg.setLayout(vlayout)

gwg.setLayout(glayout)

fwg.setLayout(flayout)

再把这四个 QWidget 部件添加至全局变量

wlayout.addWidget(hwg)

wlayout.addWidget(vwg)

wlayout.addWidget(gwg)

wlayout.addWidget(fwg)

最后一步,把全局布局应用到窗体本尊

self.setLayout(wlayout)

3. 完整代码

from PyQt5 importQtWidgetsclassMyWindow(QtWidgets.QWidget):def __init__(self):

super().__init__()

self.setWindowTitle('PyQt5布局示例')#开始:

wlayout = QtWidgets.QHBoxLayout() #全局布局(1个):水平

hlayout= QtWidgets.QHBoxLayout() #局部布局(4个):水平、竖直、网格、表单

vlayout =QtWidgets.QVBoxLayout()

glayout=QtWidgets.QGridLayout()

flayout=QtWidgets.QFormLayout()

hlayout.addWidget(QtWidgets.QPushButton(str(1))) #局部布局添加部件(例如:按钮)

hlayout.addWidget(QtWidgets.QPushButton(str(2)))

vlayout.addWidget(QtWidgets.QPushButton(str(3)))

vlayout.addWidget(QtWidgets.QPushButton(str(4)))

glayout.addWidget(QtWidgets.QPushButton(str(5)),0,0)

glayout.addWidget(QtWidgets.QPushButton(str(6)),0,1)

glayout.addWidget(QtWidgets.QPushButton(str(7)),1,0)

glayout.addWidget(QtWidgets.QPushButton(str(8)),1,1)

flayout.addWidget(QtWidgets.QPushButton(str(9)))

flayout.addWidget(QtWidgets.QPushButton(str(10)))

flayout.addWidget(QtWidgets.QPushButton(str(11)))

flayout.addWidget(QtWidgets.QPushButton(str(12)))

hwg= QtWidgets.QWidget() #准备四个部件

vwg =QtWidgets.QWidget()

gwg=QtWidgets.QWidget()

fwg=QtWidgets.QWidget()

hwg.setLayout(hlayout)#四个部件设置局部布局

vwg.setLayout(vlayout)

gwg.setLayout(glayout)

fwg.setLayout(flayout)

wlayout.addWidget(hwg)#四个部件加至全局布局

wlayout.addWidget(vwg)

wlayout.addWidget(gwg)

wlayout.addWidget(fwg)

self.setLayout(wlayout)#窗体本尊设置全局布局

if __name__=="__main__":importsys

app=QtWidgets.QApplication(sys.argv)

win=MyWindow()

win.show()

sys.exit(app.exec_())

qt布局嵌套_PyQt5 笔记(01):嵌套布局相关推荐

  1. qt布局嵌套_QDockWidget嵌套布局详解-实现Visual Studio布局

    概述 许多工程软件,如Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口. Qt的嵌套布局由QDockWidget完成,用Qt Creator拖 ...

  2. Bootstrap学习笔记01【快速入门、栅格布局】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  3. 【Qt学习笔记】3.布局

    一.手动布局 布局,Layout,就是把各个控件放在合适的位置,占据适当大小的空间. 在Qt中,使用布局器QLayout进行布局,QLayout本质上是一个工具类. 1.它为我们自动计算各个控件的大小 ...

  4. qt checkbox 选中事件_Qt学习笔记3(布局管理)

    界面组件布局: Qt 的界面设计使用了布局(Layout)功能.所谓布局,就是界面上组件的排列方式,使用布局可以使组件有规则地分布,并且随着窗体大小变化自动地调整大小和相对位置. 界面组件的层次关系. ...

  5. 婧婧音乐开发笔记01篇-项目组织结构和布局文件

    学习Android已经一段时间了打算做一款播放器来练练手.下面的效果图是开发婧婧音乐第一阶段的效果图: 一:1.0阶段可以满足基本的功能:   1.自动获取SD卡的音乐文件,并以ListView的形式 ...

  6. qt mysql分页控件_Qt分页布局与切分窗口的实现

    一.如何实现分页展示? QStackedLayout类可对窗口实现分页展示,每次只显示一个布局,将其他页的布局隐藏.为方便,Qt提供一个内置QStackedLayout的便利类:QStackedWid ...

  7. 《Python+Kivy(App开发)从入门到实践》自学笔记:ScatterLayout布局

    章节目录与知识点总揽 2.8 ScatterLayout布局     ScatterLayout布局--分散布局 与RelativeLayout布局类似,当更改位置时,布局内的小部件也会随着父布局一起 ...

  8. 一文读懂qt界面设计(分裂器,布局,拉伸,各种属性设置)

    可以先看看我这个文章:qt关于界面设计中的一些知识总结_我是标同学的博客-CSDN博客_qt 水平伸展 现在我们来正式开始讲解. 布局种类 qt中能称为布局管理器的有如下6个: 水平布局(QHBoxL ...

  9. 响应式布局Bootstrap--学习笔记

    文章目录 一.响应式开发 二. Bootstrap前端开发框架 三.Bootstrap 栅格系统 四.移动端布局总结 一.响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局 ...

最新文章

  1. android常用命令
  2. Android图片处理
  3. 解决三星手机EditText背景色的问题
  4. Redis 内存用完会怎样?
  5. 12.swift 元祖
  6. Bootstrap 分页导航中的翻页组件
  7. 力荐50个最实用的免费机器学习数据集
  8. Gradle之module间依赖版本同步
  9. 雷军:我爱编程这个工作,可以肯定我会干上一辈子
  10. struts2源码系列(3)--拦截器
  11. 巨星陨落!图灵奖得主Edmund Clarke感染新冠逝世,教计算机自己检查错误的人走了...
  12. VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器
  13. 惠普打印机HP Laser Jet M233sdw硒鼓芯片拆卸
  14. 历年计算机信息系统管理师真题,历年计算机软考信息系统项目管理师真题
  15. 电力线通信(Power Line Communication)简介
  16. 华为HCDA认证全套最新讲解视频教程(笔记)
  17. matlab最小二乘法解超定方程,超定方程和最小二乘法
  18. 计算机相关的俚语,现代俄语计算机俚语的构成方式.pdf
  19. sql server 首字母大写
  20. 为什么天蝎座出互联网大佬,我来告诉你原因!

热门文章

  1. beego 文件服务器,beego自动化文档
  2. android扑克发牌动画,JS实现纸牌发牌动画
  3. 1.4 正则化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. 4.7 参数 vs 超参数-深度学习-Stanford吴恩达教授
  5. STM32F103/302 SPI3 接口使用例程
  6. Allegro16.6软件布局设计技巧:模块复用
  7. 【DIY】200521近期在做的项目小结,DIY进展汇报
  8. arduino代码运行时间测试函数,代码性能运行时间测试方法
  9. 【RFID】基于MATLAB的RFID 系统的空中接口过程以及防碰撞算法仿真
  10. 关于热插拔usb hotplug /proc/sys/kernel mdev udev busybox