嵌套布局
由于情况的需要,,有时候需要在一种布局中,嵌套别种布局,话不多,直接实例示范
实例:在布局中添加其他布局
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)