您的位置:首页 > 编程语言 > Qt开发

PyQt5 笔记(02):嵌套布局

2016-01-31 19:46 429 查看
如前一篇笔记,我们还是只讨论两层嵌套布局的情况。

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

刚才在玩 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: