嵌套布局(五)

嵌套布局

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

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

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)

猜你喜欢

转载自blog.csdn.net/jia666666/article/details/81702137