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(‘1‘))
        hl.addWidget(QPushButton(‘2‘))
        vl.addWidget(QPushButton(‘3‘))
        vl.addWidget(QPushButton(‘4‘))
        vl.addWidget(QPushButton(‘5‘))
        gl.addWidget(QPushButton(‘6‘),0,0)
        gl.addWidget(QPushButton(‘7‘),0,1)
        gl.addWidget(QPushButton(‘8‘),1,0)
        gl.addWidget(QPushButton(‘9‘),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)

时间: 2024-08-01 22:44:38

PyQt5 笔记(02):嵌套布局的相关文章

PyQt5 笔记(01):嵌套布局

PyQt5 有四种布局:水平(QHBoxLayout).竖直(QVBoxLayout).网格(QGridLayout).表单(QFormLayout)在窗体中单一的布局应该不难,但若是比较复杂的布局,一般涉及到布局的嵌套,这就头疼了. 本文的四个知识点:1. 布局不能直接嵌套(如果我错了,欢迎指正!)2. 内层的布局必须先“附着”在一个空 QWidget 上3. 然后把这个“承载”着内层布局的空部件添加至外层布局4. 最后,别忘记把全局布局“附着”到窗体本尊 0. 先看效果图 下面对布局进行分析

Android自定义view学习笔记02

Android自定义view学习笔记02 本文代码来自于张鸿洋老师的博客之Android 自定义View (二) 进阶 学习笔记,对代码进行些许修改,并补充一些在coding过程中遇到的问题.学习的新东西. 相关代码 //CustomImageView.java package mmrx.com.myuserdefinedview.textview; import android.content.Context; import android.content.res.TypedArray; im

HTML学习笔记02

HTML学习笔记02 一.HTML常用标签 HTML标题:h1-h6 HTML段落:p HTML链接:a HTML图像:img 二.HTML元素语法 HTML元素以开始标签起始. HTML元素以结束标签终止. 元素的内容是开始标签与结束标签之间的内容. 某些HTML元素具有空内容. 大多数HTML元素可拥有属性. 大多数HTML元素可以嵌套. HTML标签对大小写不敏感,但推荐使用小写. 三.HTML属性 HTML标签可以拥有属性. 属性总是以名称/值的形式出现,比如:name="value&q

从零开始学android<使用嵌套布局实现计算器界面.十七.>

所谓的嵌套布局就是在一个文件中嵌套多个布局文件 <span style="font-size:18px;"> <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layou

【OpenGL 学习笔记02】宽点画线

我们要知道,有三种绘图操作是最基本的:清除窗口,绘制几何图形,绘制光栅化对象. 光栅化对象后面再解释. 1.清除窗口 比如我们可以同时清除颜色缓冲区和深度缓冲区 glClearColor (0.0, 0.0, 0.0, 0.0);//指定颜色缓冲区清除为黑色 glClearDepth(1.0);//指定深度缓冲区的清除值为1.0 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//指定要清除的缓冲区并清除 2.绘制几何图形 先要设置绘制颜色,

SWIFT学习笔记02

1.//下面的这些浮点字面量都等于十进制的12.1875: let decimalDouble = 12.1875 let exponentDouble = 1.21875e1 let hexadecimalDouble = 0xC.3p0//==12+3*(1/16) 2.//类型别名,用typealias关键字来定义类型别名 typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min 3.//元组 let ht

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

【安卓笔记】抽屉式布局----DrawerLayout

效果如下: DrawerLayout来自support.v4包,所以不用考虑兼容性问题.其次,这种布局类似风靡一时的侧滑菜单,但是比侧滑菜单轻巧许多. 下面介绍这种布局的使用方式. 1.在你的项目中导入support.v4包. 2.编辑一个布局,根节点为android.support.v4.widget.DrawerLayout,此节点下只允许有两个子节点,第一个为将来主页面的内容,第二个节点即为"抽屉"内容,通常是一个ListView.比如: <android.support.

《构建之法》阅读笔记02

<架构之美>阅读笔记02 今天,我读了<架构之美>第三.四章,第三章主要讲伸缩性架构设计,书中说设计系统架构时,要确保系统在伸缩时的弹性,根据书中的介绍我对系统伸缩性的理解是每个网站在不同时期都会有不同的访问量,有时会很多,有时会较少,当较多的人访问你的系统时,你可能需要数量较多的设备来满足用户与系统的交互,但当访问的用户越来越少时,系统伸缩性如果不够好,很多设备就会被浪费,不能够与系统分离,这对于软件开发者是不可取的.Darkstar项目就是由Sun公司实验室承担的一个将在架构的