080.PyQt5_QStackedLayout_栅格(堆叠)布局

  

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

QStackedLayout 栅格(堆叠)布局

  • 描述
    • 提供一个堆叠起来的布局,在同一时刻只能显示一个控件
    • 里面提供了相关方法,可以切换显示控件
    • 该布局管理器必须先设置父控件/父布局,再添加子元素
  • 功能作用
  • 构造函数
    QStackedLayout()                    # 创建对象
    QStackedLayout(QWidget)             # 创建对象的同时设置父控件
    QStackedLayout(QLayout)             # 创建对象的同时设置父布局
    
  • 添加子控件
    addWidget(self, QWidget)-> int              # 添加一个子控件并返回该子控件所在的索引号
    
    insetWidget(self, int, QWidget)-> int       # 在指定索引位置插入一个子控件
    # 如果插入在当前显示控件的索引位置,并不会显示当前插入的控件
    # 而是会改变当前显示的索引号往后推移,保持继续显示开始显示的控件
    
  • 删除子控件
    removeWidget(self, QWidget)                  # 继承父类方法,删除指定控件
    
    
  • 获取子控件
    widget(int)->QWidget                         # 获取指定索引位置的控件
    
    currentWidget(self) -> QWidget               # 获取当前显示的控件
    currentIndex()->int                          # 获取当前显示控件的索引号
    
  • 切换显示
    setCurrentIndex(self, int)                   # 通过索引号设置当前显示的控件
    currentWidget(self) -> QWidget               # 获取当前显示的控件名
    
    setCurrentWidget(self, QWidget)              # 通过控件名设置当前显示的控件
    currentIndex()->int                          # 获取当前显示控件的索引号
    
  • 展示模式
    setStackingMode(self, QStackedLayout.StackingMode)      # 设置展示模式
    stackingMode(self)-> QStackedLayout.StackingMode        # 获取展示模式
    # 参数:QStackedLayout.StackingMode
    #       QStackedLayout.StackOne = 0                     # 默认,只有当前显示控件可见
    #       QStackedLayout.StackAll = 1                     # 所有控件都可见,当前控件显示在最前面
    
    • QStackedLayout.StackOne模式时,当前显示控件被隐藏时,后面的控件不会被展示
    • 不管什么展示模式,当展示控件被删除时,后面的控件都会展示出来

  • 可用信号
    currentChanged(int index)                               # 当前展示控件发生改变时发射该信号,,传递当前显示控件的索引号
    widgetRemoved(int index)                                # 子控件被删除时发射该信号,传递被删除控件的索引号
    

  • 示例代码
  • 示例1:QStackedLayout-功能作用
    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QStackedLayout-功能作用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            # 1. 创建堆叠布局管理器对象
            s_layout = QStackedLayout()
            # 2. 将堆叠布局管理器设置给需要布局的父控件
            self.setLayout(s_layout)
            # 创建子控件
            lab1 = QLabel('标签1')
            lab2 = QLabel('标签2')
            lab3 = QLabel('标签3')
            lab1.setStyleSheet('background-color:cyan;')
            lab2.setStyleSheet('background-color:yellow;')
            lab3.setStyleSheet('background-color:red;')
            # 3. 将子控件添加到堆叠布局管理器
            # 添加子控件
            s_layout.addWidget(lab1)
            s_layout.addWidget(lab2)
            # 插入子控件
            # 如果插入在当前显示控件的索引位置,并不会显示当前插入的控件
            # 而是会改变当前显示的索引号往后推移,保持继续显示开始显示的控件
            s_layout.insertWidget(0, lab3)
    
            # 删除子控件
            # s_layout.removeWidget(lab1)
    
            # 获取子控件
            print('获取指定索引子控件:',s_layout.widget(0).text())
            print('获取当前显示子控件:',s_layout.currentWidget().text())
            print('获取当前显示子控件索引:',s_layout.currentIndex())
    
            # 切换显示
            # 通过控件设置当前显示控件
            s_layout.setCurrentWidget(lab3)
            # 通过索引设置点前显示控件
            s_layout.setCurrentIndex(1)
            # 通过QTimer设置每隔1秒切换控件
            # timer = QTimer(self)
            # timer.timeout.connect(lambda :s_layout.setCurrentIndex((s_layout.currentIndex()+1) % s_layout.count()))
            # timer.start(1000)
    
            # 展示模式
            # s_layout.setStackingMode(QStackedLayout.StackOne)       # 仅展示一个控件
            s_layout.setStackingMode(QStackedLayout.StackAll)     # 展示所有控件
    
            # 仅展示一个控件模式,当前展示控件被隐藏后,其他控件均不可见
            # 展示所有控件模式,当前展示控件被隐藏后,后面的控件会自动展示出出来
            # 删除控件的时候,不管设置的是什么展示模式,后面的控件均会自动展示出来
            s_layout.currentWidget().hide()
    
            # 可用信号
            # 当前展示控件发生改变时发射该信号,传递当前显示控件的索引号
            s_layout.currentChanged.connect(lambda val:print('当前展示控件发生了改变:', val))
    
            # 子控件被删除时发射该信号,传递被删除控件的索引号
            s_layout.widgetRemoved.connect(lambda val:print('控件被删除了:', val))
            s_layout.removeWidget(lab1)
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值