python GUI开发-(二)QySide布局管理器

在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”))

其显示效果为

python GUI开发-(二)QySide布局管理器

QVBoxLayout-垂直布局

V为英文单词vertical的首字母,顾名思义,垂直布局就是将组件垂直排列。伪代码如下:

vBoxLayOut = QVBoxLayout()

vBoxLayOut.addWidget(QLabel(“1”))

vBoxLayOut.addWidget(QLabel(“2”))

vBoxLayOut.addWidget(QLabel(“3”))

其显示效果为

python GUI开发-(二)QySide布局管理器

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)

其显示效果为

python GUI开发-(二)QySide布局管理器

QFormLayout-表单布局

QFormLayout是一种特殊的布局,它用于创建表单界面,其中控件(一般是标签和行编辑控件)以标签-字段对的形式排列。伪代码如下:

formLayout = QFormLayout()

formLayout.addRow(label1, QLineEdit())

formLayout.addRow(label2, QLineEdit())

formLayout.addRow(label3, QLineEdit())

formLayout.addRow(label4, QLineEdit())

其显示效果为

python GUI开发-(二)QySide布局管理器

QStackedLayout-堆叠布局

QStackedLayout 是 PySide6 中用于管理多个子控件的布局管理器,它允许在同一空间内堆叠多个子控件,但仅显示其中一个。以下是其核心功能及使用方式:

(一)核心功能

  • 堆叠显示:所有子控件按顺序排列,仅显示当前激活的子控件。
  • 动态切换:通过编程或用户交互(如QComboBox、QListWidget)切换显示的页面。

(二)常用操作

  1. 添加/删除控件:addWidget(widget):在末尾添加子控件insertWidget(widget, index):在指定索引插入控件removeWidget(index):移除指定索引的控件
  2. 切换页面:setCurrentIndex(index):直接通过索引切换到指定页面
  3. 获取当前页面:currentWidget():返回当前显示的子控件
  4. 页面数量管理: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。

其显示效果如下:

python GUI开发-(二)QySide布局管理器

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共3条

请登录后发表评论