PyQt5 笔记(02):嵌套布局
如前一篇笔记,我们还是只讨论两层嵌套布局的情况。
前面的布局有一个缺点:有三个内层布局,则需要三个空部件。那若有十个内层布局呢?显然会让人不舒服。
刚才在玩 Qt Designer 时,发现了一个更好的办法,不管有多少个内层布局,只需要一个空部件。
一、过程分析:
1. 先准备一个全局部件,用于"承载"全局布局
# 全局部件(注意参数 self),用于"承载"全局布局
wwg = QWidget(self)
2. 再定义全局布局
wl = QVBoxLayout(wwg) # 全局布局(注意参数 wwg)
3. 定义三个局部布局
vl = QVBoxLayout() # 三个局部布局
hl = QHBoxLayout()
gl = QGridLayout()
4. 当然,局部布局内肯定打算放置一些部件
pass # 这里向局部布局内添加部件
5. 把三个局部布局加到全局布局
wl.addLayout(vl) # 加到全局布局
wl.addLayout(gl)
wl.addLayout(hl)
二、全部代码
from PyQt5.QtWidgets import *
class MyWindow(QWidget):  
    def __init__(self):
        super().__init__()
        self.setWindowTitle('PyQt5布局示例')
        self.resize(400, 300)
        # 全局部件(注意参数 self),用于"承载"全局布局
        wwg = QWidget(self)
        wl = QVBoxLayout(wwg) # 全局布局(注意参数 wwg)
        vl = QVBoxLayout() # 三个局部布局
        hl = QHBoxLayout()
        gl = QGridLayout()
        pass # 这里向局部布局内添加部件
        wl.addLayout(vl) # 加到全局布局
        wl.addLayout(gl)
        wl.addLayout(hl)
if __name__=="__main__":
    import sys    
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())   
补充:
照上面的思路,更进一步,可以不要多余的空部件:
from PyQt5.QtWidgets import *
class MyWindow(QWidget):  
    def __init__(self):
        super().__init__()
        self.setWindowTitle('PyQt5布局示例')
        self.resize(400, 300)
        # 全局布局(注意参数 self)
        wl = QVBoxLayout(self) 
        # 局部布局
        vl = QVBoxLayout()
        hl = QHBoxLayout()
        gl = QGridLayout()
        # 这里向局部布局内添加部件
        hl.addWidget(QPushButton(''))
        hl.addWidget(QPushButton(''))
        vl.addWidget(QPushButton(''))
        vl.addWidget(QPushButton(''))
        vl.addWidget(QPushButton(''))
        gl.addWidget(QPushButton(''),0,0)
        gl.addWidget(QPushButton(''),0,1)
        gl.addWidget(QPushButton(''),1,0)
        gl.addWidget(QPushButton(''),1,1)
        # 加到全局布局
        wl.addLayout(hl)
        wl.addLayout(vl)
        wl.addLayout(gl)
if __name__=="__main__":
    import sys
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())
再补充:
addLayout()方法原型:
addLayout(QLayout, row, col, row_cross, col_cross, Qt.Alignment)
addWidget()方法原型:
addWidget(QWidget, row, col, row_cross, col_cross, Qt.Alignment)
PyQt5 笔记(02):嵌套布局的更多相关文章
- PyQt5 笔记(01):嵌套布局
		PyQt5 有四种布局:水平(QHBoxLayout).竖直(QVBoxLayout).网格(QGridLayout).表单(QFormLayout)在窗体中单一的布局应该不难,但若是比较复杂的布局, ... 
- amazeui学习笔记--css(布局相关1)--网格Grid
		amazeui学习笔记--css(布局相关1)--网格Grid 一.总结 基本使用 1.div+class布局:amaze里面采取的就是div+class的布局方式 <div class=&q ... 
- 软件测试之loadrunner学习笔记-02集合点
		loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ... 
- 《30天自制操作系统》笔记(02)——导入C语言
		<30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ... 
- 《The Linux Command Line》 读书笔记02 关于命令的命令
		<The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ... 
- bootstrap学习总结-02 网格布局
		1 网格布局 Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列. <!DOCTYPE html> ... 
- Bootstrap页面布局4 - 嵌套布局
		嵌套布局: 在一行中,有三列,每一列都有对应的BS栅格系统中的格子,以下例中因为 .row中的div对应的class分别是span4,span4,span4,所以其每一列对应的格子数是 4,4,4 现 ... 
- Android学习笔记02
		1.线性布局LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ... 
- WPF笔记(1.4 布局)——Hello,WPF!
		原文:WPF笔记(1.4 布局)--Hello,WPF! 这一节只是第2章的引子.布局要使用Panel控件,有四种Panel,如下:DockPanel,就是设置停靠位置布局模型.StackPanel, ... 
随机推荐
- 如何使用 Jenkins、GitHub 和 Docker 在 Azure 中的 Linux VM 上创建开发基础结构
			若要将应用程序开发的生成和测试阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure VM 上创建 CI/CD 管道,包括如何: 创建 Jenkins VM 安装并配 ... 
- JavaScript运行机制的学习
			今天在偶然在网上看到一个JavaScript的面试题,尝试着看了一下,很正常的就做错了,然后给我们前端做,哈哈,他居然也顺理成章做的错了,代码大概是这样的 /*1 下面代码会怎样执行?执行结果是什么* ... 
- swift版的StringAttribute
			swift版的StringAttribute 效果 源码 https://github.com/YouXianMing/Swift-StringAttribute // // StringAttrib ... 
- 通过runtime打印出对象所有属性的值
			通过runtime打印出对象所有属性的值 今天给给大家提供的关于NSObject的category,通过runtime打印属性的值,相当有用哦,以后你再也不用每个对象都通过NSLog来逐个打印属性值了 ... 
- SharePoint 2007——内容管理之归档篇
			如果需要使用这个功能普通的站点上(没有使用Record Center站点模板的站点),必须激活'Office SharePoint Server Publishing’ featue. 在使用Rec ... 
- 代理错误[WinError 10061]
			操作过程: import urllib.request from urllib.error import URLError,HTTPError proxy_handler = urllib.reque ... 
- 如何动态调用 C 函数
			JSPatch 支持了动态调用 C 函数,无需在编译前桥接每个要调用的 C 函数,只需要在 JS 里调用前声明下这个函数,就可以直接调用: require('JPEngine').addExtensi ... 
- 1798. [AHOI2009]维护序列【线段树】
			Description 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2 ... 
- 1877. [SDOI2009]晨跑【费用流】
			Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个 ... 
- 基于PHP的cURL快速入门教程 (小偷采集程序)
			cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.很多小偷程序都是使用这个函数. 最爽的是,PHP也支持 cURL 库.本文将介绍 c ... 
