我 的 个 人 主 页: 失心疯的个人主页
入 门 教 程 推 荐 : 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 # 所有控件都可见,当前控件显示在最前面
currentChanged(int index) # 当前展示控件发生改变时发射该信号,,传递当前显示控件的索引号
widgetRemoved(int index) # 子控件被删除时发射该信号,传递被删除控件的索引号
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_())