PySide6布局管理学习笔记(QStackedLayout布局详解)

QStackedLayout可以用于创建类似于QTableWidget提供的用户界面(QStackedWidget构建在QStackedLayout之上)。

QStackedLayout没有为用户提供切换页面的内在方法,要实现页面的切换,通常可以通过存储QStackedLayout页面标题的QComBox或QListWidget来完成,代码如下:

# 创建一个QComboBox()类的实例
pageComboBox = QComboBox()

# QComboBox对象增加3个Item
pageComboBox.addItem("Page 1")
pageComboBox.addItem("Page 2")
pageComboBox.addItem("Page 3")

# 设置QComboBox实例对象的活动信号,执行设置QStackedLayout的活动页面的方法
# 把pageCombox对象项目(item)索引传递给setCurrentIndex(int index),实现切换
pageComboBox.activated.connect(stackedLayout.setCurrentIndex)

上面使用setCurrentIndex(int  index)实现页面切换,另外,还可以使用setCurrentWidget(QWidget  w)来切换指定的页面(传递的参数w 必须是QStackedLayout已经包含的控件),一个完整案例代码如下:

# -*- coding: utf-8 -*-
"""
文件名字:PySide6_StackedLayoutDemo
作者姓名:诚外无物
创建日期:2023/11/14
项目名称:chapter01
"""
import sys
from PySide6.QtWidgets import *
class StackedLayoutDemo(QWidget):
    def __init__(self, parent=None):
        super(StackedLayoutDemo, self).__init__(parent)
        self.setWindowTitle("QStackedLayout布局管理例子")
        self.resize(400, 100)

        # 创建一个垂直布局实例对象,并添加到主窗口中
        layout = QVBoxLayout()
        self.setLayout(layout)

        # 实例化QComboBox对象(添加3个页面导航)
        pageComboBox = QComboBox()
        pageComboBox.addItem("导航页面一")
        pageComboBox.addItem("导航页面二")
        pageComboBox.addItem("导航页面三")

        # 把QComboBox对象添加到垂直布局对象中
        layout.addWidget(pageComboBox)

        # 创建一个QStackedLayout实例对象
        stackedLayout = QStackedLayout()
        # 把QStackedLayout实例对象添加到垂直布局对象中,在QComboBox对象的下方
        layout.addLayout(stackedLayout)

        # 创建页面对象1
        pageWidget1 = QWidget()

        # 实例化一个水平布局对象,并添加到页面对象1中
        layout1 = QHBoxLayout()
        pageWidget1.setLayout(layout1)

        # 把页面对象1添加到QStackedLayout布局对象中
        stackedLayout.addWidget(pageWidget1)

        # 创建页面对象2
        pageWidget2 = QWidget()

        # 创建一个垂直布局对象
        layout2 = QVBoxLayout()
        # 把垂直布局对象添加到页面对象2中
        pageWidget2.setLayout(layout2)

        # 把页面对象2添加到QStackedLayout实例对象中
        stackedLayout.addWidget(pageWidget2)

        # 创建页面对象3
        pageWidget3 = QWidget()

        # 创建一个表单布局对象
        layout3 = QFormLayout()
        # 把表单布局对象添加到页面对象3中
        pageWidget3.setLayout(layout3)

        # 把页面布局对象3添加到QStackedLayout布局随想中
        stackedLayout.addWidget(pageWidget3)

        # 使用for循环,分别在3个布局对象中,添加控件对象
        for i in range(5):
            # 在水平布局对象中,添加3个按钮对象
            layout1.addWidget(QPushButton('button%d' % i))
            # 在垂直布局对象中,添加3个按钮对象
            layout2.addWidget(QPushButton('button%d' % i))
            # 在表单布局对象中,添加3个按钮对象,同时也增加了对应的3个标签对象
            layout3.addRow('row%d' % i, QPushButton('button%d' % i))

        # 导航与页面链接:通过pageComboBox切换
        # 执行setCurrentIndex方法,传递自身的索引值,从而实现页面的切换
        pageComboBox.activated.connect(stackedLayout.setCurrentIndex)

        # 添加按钮切换导航页面1-3
        buttonLayout = QHBoxLayout()
        layout.addLayout(buttonLayout)
        button1 = QPushButton('切换页面1')
        button2 = QPushButton('切换页面2')
        button3 = QPushButton('切换页面3')
        buttonLayout.addWidget(button1)
        buttonLayout.addWidget(button2)
        buttonLayout.addWidget(button3)
        button1.clicked.connect(lambda: stackedLayout.setCurrentIndex(0))
        button2.clicked.connect(lambda: stackedLayout.setCurrentIndex(1))

        '''下面一行代码和上一行是同样的效果
        button2.clicked.connect(lambda: stackedLayout.setCurrentWidget(pageWidget2))
        '''

        button3.clicked.connect(lambda: stackedLayout.setCurrentIndex(2))

        # 创建了一个标签对象,用来显示页面切换的信息提示
        label = QLabel('显示信息')
        layout.addWidget(label)
        stackedLayout.currentChanged.connect(lambda x: label.setText('切换到页面%d' % (x + 1)))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = StackedLayoutDemo()
    form.show()
    sys.exit(app.exec())

上面一段代码,也进一步温习前面学习的垂直/水平/表单布局对象的使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值