PyQt5 笔记(02):嵌套布局

mac2022-06-30  72

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

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

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

转载于:https://www.cnblogs.com/hhh5460/p/5173846.html

最新回复(0)