PyQt5布局管理之嵌套布局(五)

嵌套布局

由于情况的需要,,有时候需要在一种布局中,嵌套别种布局,话不多,直接实例示范

实例:在布局中添加其他布局

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setWindowTitle('嵌套布局实例')

        #全局布局(2中):这里选择水平布局
        wlayout=QHBoxLayout()

        #局部布局:水平,垂直,网格,表单
        hlayout=QHBoxLayout()
        vlayout=QVBoxLayout()
        glayout=QGridLayout()
        flayout=QFormLayout()

        #为局部布局添加控件
        hlayout.addWidget(QPushButton(str(1)))
        hlayout.addWidget(QPushButton(str(2)))

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

        glayout.addWidget(QPushButton(str(5)),0,0)
        glayout.addWidget(QPushButton(str(6)),0,1)
        glayout.addWidget(QPushButton(str(7)),1,0)
        glayout.addWidget(QPushButton(str(8)),1,1)

        flayout.addWidget(QPushButton(str(9)))
        flayout.addWidget(QPushButton(str(10)))
        flayout.addWidget(QPushButton(str(11)))
        flayout.addWidget(QPushButton(str(12)))

        #准备四个控件
        hwg=QWidget()
        vwg=QWidget()
        gwg=QWidget()
        fwg=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__':
    app=QApplication(sys.argv)
    win=MyWindow()
    win.show()
    sys.exit(app.exec_())

运行效果图
这里写图片描述

代码分析

第一步:全局布局
全局布局采用的是水平布局

wlayout=QHBoxLayout()

第二步:局部布局
实例化四中局部布局

        #局部布局:水平,垂直,网格,表单
        hlayout=QHBoxLayout()
        vlayout=QVBoxLayout()
        glayout=QGridLayout()
        flayout=QFormLayout()

第三步:准备四个QWidget控件

        hwg=QWidget()
        vwg=QWidget()
        gwg=QWidget()
        fwg=QWidget()

第四步:为四个QWidget控件分别设置布局

        hwg.setLayout(hlayout)
        vwg.setLayout(vlayout)
        gwg.setLayout(glayout)
        fwg.setLayout(flayout)

第五步:将4个QWidget控件添加到全局布局中

        wlayout.addWidget(hwg)
        wlayout.addWidget(vwg)
        wlayout.addWidget(gwg)
        wlayout.addWidget(fwg)

最后:全局布局应用到窗口本身

        self.setLayout(wlayout)

实例二:在窗口中添加布局

上一个实例,有一个缺点,那就是4中局部布局需要四个空白控件,倘若有100中局部布局,就需要100个空白控件,其实,有较好的一种方法,不管有多少布局,只需要一个空白控件,然后在这个空白控件中进行多种布局,也能实现同样的效果

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setWindowTitle('嵌套布局实例')
        self.resize(700,200)


        #全局控件(注意参数self),用于承载全局布局
        wwg=QWidget(self)

        #全局布局(注意参数wwg)
        wlayout = QHBoxLayout(wwg)

        hlayout = QHBoxLayout()
        vlayout = QVBoxLayout()
        glayout = QGridLayout()
        flayout = QFormLayout()

        # 为局部布局添加控件
        hlayout.addWidget(QPushButton(str(1)))
        hlayout.addWidget(QPushButton(str(2)))

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

        glayout.addWidget(QPushButton(str(5)), 0, 0)
        glayout.addWidget(QPushButton(str(6)), 0, 1)
        glayout.addWidget(QPushButton(str(7)), 1, 0)
        glayout.addWidget(QPushButton(str(8)), 1, 1)

        flayout.addWidget(QPushButton(str(9)))
        flayout.addWidget(QPushButton(str(10)))
        flayout.addWidget(QPushButton(str(11)))
        flayout.addWidget(QPushButton(str(12)))

        #在局部布局中添加控件,然后将其添加到全局布局中
        wlayout.addLayout(hlayout)
        wlayout.addLayout(vlayout)
        wlayout.addLayout(glayout)
        wlayout.addLayout(flayout)
if __name__ == '__main__':
    app=QApplication(sys.argv)
    win=MyWindow()
    win.show()
    sys.exit(app.exec_())

运行效果图
这里写图片描述

代码分析

第一步:准备一个全局控件用于添加全局布局

wwg=QWidget(self)

第二步:定义全局布局与四中局部布局

        wlayout = QHBoxLayout(wwg)

        hlayout = QHBoxLayout()
        vlayout = QVBoxLayout()
        glayout = QGridLayout()
        flayout = QFormLayout()

第三步:局部布局添加控件

         # 为局部布局添加控件
        hlayout.addWidget(QPushButton(str(1)))
        hlayout.addWidget(QPushButton(str(2)))

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

        glayout.addWidget(QPushButton(str(5)), 0, 0)
        glayout.addWidget(QPushButton(str(6)), 0, 1)
        glayout.addWidget(QPushButton(str(7)), 1, 0)
        glayout.addWidget(QPushButton(str(8)), 1, 1)

        flayout.addWidget(QPushButton(str(9)))
        flayout.addWidget(QPushButton(str(10)))
        flayout.addWidget(QPushButton(str(11)))
        flayout.addWidget(QPushButton(str(12)))

最后:局部布局添加到全局布局中

       #在局部布局中添加控件,然后将其添加到全局布局中
        wlayout.addLayout(hlayout)
        wlayout.addLayout(vlayout)
        wlayout.addLayout(glayout)
        wlayout.addLayout(flayout)

  • 8
    点赞
  • 1
    评论
  • 21
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值