我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 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_())