PyQt5 笔记(02):嵌套布局
2016-01-31 19:46
429 查看
如前一篇笔记,我们还是只讨论两层嵌套布局的情况。
前面的布局有一个缺点:有三个内层布局,则需要三个空部件。那若有十个内层布局呢?显然会让人不舒服。
刚才在玩 Qt Designer 时,发现了一个更好的办法,不管有多少个内层布局,只需要一个空部件。
2. 再定义全局布局
3. 定义三个局部布局
4. 当然,局部布局内肯定打算放置一些部件
5. 把三个局部布局加到全局布局
补充:
照上面的思路,更进一步,可以不要多余的空部件:
再补充:
addLayout()方法原型:
addLayout(QLayout, row, col, row_cross, col_cross, Qt.Alignment)
addWidget()方法原型:
addWidget(QWidget, row, col, row_cross, col_cross, Qt.Alignment)
前面的布局有一个缺点:有三个内层布局,则需要三个空部件。那若有十个内层布局呢?显然会让人不舒服。
刚才在玩 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)
相关文章推荐
- PyQt5 笔记(01):嵌套布局
- QT 实现在一个模块中间显示一个红色提示框,3秒后消失
- QT中实现程序只运行一个实例--应用程序的单例化
- Qt VTK QVTK.dll
- Qt子窗口全屏显示
- Qt4.8 移植
- QT5串口编写简单的上位机
- Qt中文件类型过滤器
- OSG+QT5+vs2010编译
- Qt——信号槽连接:基于字符串与基于函数的连接之间的不同
- 将DLL和EXE打包成一个EXE
- 利用Qt自带的windeployqt复制依赖文件
- Qt序列化格式分析(qint,QString)(非常简单好用)
- 使用Visual Studio(VS)开发Qt程序代码提示功能的实现
- Qt浅谈之右下角浮出界面
- Debian8.1-x64下安装Qt5.5.1+sip4.17+QScintilla-gpl-2.9.1+PyQt-gpl-5.5.1+eric6-6.1.1
- 基于Qt5图形视图框架的“俄罗斯方块”
- Qt调用摄像头(截取并保存图片)
- error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
- QT5 添加 newtwork 库后还是无法找到库(LNK2019)的解决方法