在GUI界面开发中,组件如何排版、布局是一个很重大的课题。如果你接触过Web网页开发,那么应该知道网页布局是通过Css来完成的。在使用QySide进行界面开发时,布局就是通过布局管理器来完成的。
布局管理器
PySide6 提供了多种布局类,主要包括:
- QHBoxLayout:水平排列小部件。
- QVBoxLayout:垂直排列小部件。
- QGridLayout:将小部件放置在网格中的行和列位置上。
- QFormLayout:用于创建标签和输入字段的表单布局。
- QStackedLayout:在同一位置堆叠多个小部件,只显示其中一个小部件。
接下来我们一个一个来解释其使用方法。第一我们先定义4个Label组件,其背景颜色分别为红、绿、蓝、黄。以红色背景的Label为例,其代码如下:
label1 = QLabel(“1”)
label1.setAutoFillBackground(True)
label1.setAlignment(Qt.AlignCenter)
label1.setPalette(QPalette(QColor(“red”)))
label1.setStyleSheet(“QLabel { color : white; }”)
label1.setFont(QFont(“宋体”,18))
QHBoxLayout-水平布局
H为英文单词horizontal的首字母,顾名思义,水平布局就是将组件水平排列。伪代码如下:
hBoxLayOut = QHBoxLayout()
hBoxLayOut.addWidget(QLabel(“1”))
hBoxLayOut.addWidget(QLabel(“2”))
hBoxLayOut.addWidget(QLabel(“3”))
其显示效果为

QVBoxLayout-垂直布局
V为英文单词vertical的首字母,顾名思义,垂直布局就是将组件垂直排列。伪代码如下:
vBoxLayOut = QVBoxLayout()
vBoxLayOut.addWidget(QLabel(“1”))
vBoxLayOut.addWidget(QLabel(“2”))
vBoxLayOut.addWidget(QLabel(“3”))
其显示效果为

QGridLayout-网格布局
网格布局类似于html中的table,意思是将小组件放在不同的格子中,具体有几行几列,由传入的参数决定。伪代码如下:
gridBoxLayOut = QGridBoxLayout()
gridBoxLayOut.addWidget(QLabel(“1”),0,0)
gridBoxLayOut.addWidget(QLabel(“2”),0,2)
gridBoxLayOut.addWidget(QLabel(“3”),0,3)
gridBoxLayOut.addWidget(QLabel(“4”),1,1)
其显示效果为

QFormLayout-表单布局
QFormLayout是一种特殊的布局,它用于创建表单界面,其中控件(一般是标签和行编辑控件)以标签-字段对的形式排列。伪代码如下:
formLayout = QFormLayout()
formLayout.addRow(label1, QLineEdit())
formLayout.addRow(label2, QLineEdit())
formLayout.addRow(label3, QLineEdit())
formLayout.addRow(label4, QLineEdit())
其显示效果为

QStackedLayout-堆叠布局
QStackedLayout 是 PySide6 中用于管理多个子控件的布局管理器,它允许在同一空间内堆叠多个子控件,但仅显示其中一个。以下是其核心功能及使用方式:
(一)核心功能
- 堆叠显示:所有子控件按顺序排列,仅显示当前激活的子控件。
- 动态切换:通过编程或用户交互(如QComboBox、QListWidget)切换显示的页面。
(二)常用操作
- 添加/删除控件:addWidget(widget):在末尾添加子控件insertWidget(widget, index):在指定索引插入控件removeWidget(index):移除指定索引的控件
- 切换页面:setCurrentIndex(index):直接通过索引切换到指定页面
- 获取当前页面:currentWidget():返回当前显示的子控件
- 页面数量管理:count():获取子控件数量
(三)典型应用场景
- 标签页功能:模拟QTabWidget的界面切换效果
- 动态内容展示:根据用户操作或程序逻辑切换不同页面内容
- 动画效果:结合QPropertyAnimation实现翻页动画
其伪代码比较多,就不贴出来了。
布局嵌套
Qyside6提供的所有布局管理器就上述5种,在实际GUI开发中,可以将上述5中布局管理器灵活嵌套。列如在QGridLayout中嵌套水平布局和垂直布局。伪代码如下:
gridBoxlayout = QGridLayout(gridWidget)
gridBoxlayout.setSpacing(20)
gridBoxlayout.setHorizontalSpacing(20)
gridBoxlayout.addLayout(hBoxlayout, 0 ,1)
gridBoxlayout.addLayout(vBoxlayout, 1 ,2)
其中hBoxlayout中加入了label1和label2,vBoxlayout中加入了label3和label4。
其显示效果如下:


















- 最新
- 最热
只看作者