pyside2系列之布局QStackedLayout

 QStackedLayout 堆叠布局

QStackedLayout 提供一个管理子窗口的栈,在某一时刻只有一个子窗口可见。

QStackedLayout 使用 addWidget 添加子窗口,index按添加先后顺序从0开始。

QStackedLayout 使用 setCurrentIndex(index) 来显示当前子窗口。

下面是一个 demo

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: wind
@contact: 367059791@qq.com
@time: 2022/01/17 17:36
@file: demo_stackedlayout.py
@desc: 
"""

import sys
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (
    QApplication, QMainWindow, QWidget, QStackedLayout,
    QToolBar, QToolButton, QStyle, QColorDialog, QFontDialog
)


class DemoStackedLayout(QMainWindow):
    def __init__(self, parent=None):
        super(DemoStackedLayout, self).__init__(parent)
        self.setWindowTitle('QStackedLayout Demo!')
        self.resize(600, 400)

        btn_color = self.create_tool_btn("颜色")
        btn_font = self.create_tool_btn("字体")
        btn_color.clicked.connect(lambda: self.on_btn_clicked(0))
        btn_font.clicked.connect(lambda: self.on_btn_clicked(1))

        tool_bar = QToolBar(self)
        tool_bar.addWidget(btn_color)
        tool_bar.addWidget(btn_font)
        self.addToolBar(Qt.LeftToolBarArea, tool_bar)

        main_widget = QWidget(self)
        self.mainLayout = QStackedLayout(main_widget)   # 
        self.mainLayout.addWidget(QColorDialog(self))   # 0
        self.mainLayout.addWidget(QFontDialog(self))    # 1
        main_widget.setLayout(self.mainLayout)
        self.setCentralWidget(main_widget)

    def create_tool_btn(self, text, icon=None, style=None):
        btn = QToolButton(self)
        btn.setText(text)
        btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        btn.setIcon(QApplication.style().standardIcon(QStyle.SP_DesktopIcon))
        return btn

    def on_btn_clicked(self, index):
        if index < self.mainLayout.count():
            self.mainLayout.setCurrentIndex(index)   # 


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoStackedLayout()
    window.show()
    sys.exit(app.exec_())

 运行如下:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值