PyQt5 笔记(02):嵌套布局

简介: 如前一篇笔记,我们还是只讨论两层嵌套布局的情况。 前面的布局有一个缺点:有三个内层布局,则需要三个空部件。那若有十个内层布局呢?显然会让人不舒服。 刚才在玩 Qt Designer 时,发现了一个更好的办法,不管有多少个内层布局,只需要一个空部件。

如前一篇笔记,我们还是只讨论两层嵌套布局的情况。

前面的布局有一个缺点:有三个内层布局,则需要三个空部件。那若有十个内层布局呢?显然会让人不舒服。

刚才在玩 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)

目录
相关文章
|
5月前
|
Python
PyQt5常见布局、控件用法有哪些?
这是关于Python GUI编程中使用的布局和控件的简要介绍: - **布局**: - `QHBoxLayout`:用于水平排列控件。 - `QVBoxLayout`:用于垂直排列控件。 - `QGridLayout`:在网格中排列控件,支持多行多列。 - `QFormLayout`:创建表单样式的布局,方便组织输入字段。
《QT从基础到进阶·六》布局及布局中的小部件排列
《QT从基础到进阶·六》布局及布局中的小部件排列
163 0
|
C++
QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 始篇
详细的介绍可以看QT的官方助手,那里面介绍的详细且明白,需要一定的英语基础,我这里直接使用一个开源项目来介绍QGraphicsView、QGraphicsScene的使用。
306 1
QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 终篇
接上一篇,我们需要继续完成以下的效果; 先上个效果图:
127 0
|
Python 容器
tkinter GUI编程(学习笔记-1 窗口组件与布局)
tkinter GUI编程(学习笔记-1 窗口组件与布局)
153 0
|
Python
Python高级进阶#009 pyqt5中窗体的绝对布局和相对布局
Python高级进阶#009 pyqt5中窗体的绝对布局和相对布局
10111 2
|
编解码 Python
Python高级进阶#008 pyqt5窗体居中和布局
Python高级进阶#008 pyqt5窗体居中和布局
305 0
|
定位技术 图形学 容器
Qt5入门学习——图形视图框架
Qt5入门学习——图形视图框架
389 0
Qt5入门学习——图形视图框架
|
测试技术 定位技术 C++
QCustomPlot开发笔记(二):QCustomPlot用户交互、元素项以及特殊用法
QCustomPlot开发笔记(二):QCustomPlot用户交互、元素项以及特殊用法
QCustomPlot开发笔记(二):QCustomPlot用户交互、元素项以及特殊用法
|
计算机视觉
qml开发笔记(一):界面元素初探
qml开发笔记(一):界面元素初探
qml开发笔记(一):界面元素初探