博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
布局管理之 QStackedLayout (堆 布局)
阅读量:4562 次
发布时间:2019-06-08

本文共 8529 字,大约阅读时间需要 28 分钟。

QStackedLayout 描述:

提供了一个堆叠起来的布局,在同一时刻只能显示一个控件,里面提供了相关方法,可以切换控件。

 

QStackedLayout 功能作用:

 

构造函数:

from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("QStackedLayout的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        stackedLayout = QStackedLayout()        self.setLayout(stackedLayout)  #一般先设置它         label1= QLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        label4= QLabel("标签4")        label4.setStyleSheet("background-color:cyan;")        label5= QLabel("标签5")        label5.setStyleSheet("background-color:blue;")        v_layout = QVBoxLayout()        v_layout.addWidget(label4)        v_layout.addWidget(label5)        stackedLayout.addWidget(label1)        stackedLayout.addWidget(label2)        stackedLayout.addWidget(label3)if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
View Code

 

 

添加子控件:

 

获取子控件:

 

 

切换:

from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("QStackedLayout的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        stackedLayout = QStackedLayout()        self.setLayout(stackedLayout)  #一般先设置它        label1= QLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        label4= QLabel("标签4")        label4.setStyleSheet("background-color:cyan;")        label5= QLabel("标签5")        label5.setStyleSheet("background-color:blue;")        v_layout = QVBoxLayout()        v_layout.addWidget(label4)        v_layout.addWidget(label5)        stackedLayout.addWidget(label1)        stackedLayout.addWidget(label2)        stackedLayout.addWidget(label3)        #轮流显示 各个标签        timer = QTimer(self)        def timeout_slot():            stackedLayout.setCurrentIndex((stackedLayout.currentIndex()+1)%stackedLayout.count())        timer.timeout.connect(timeout_slot)        timer.start(500)if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
View Code

 

展示模式:

from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("QStackedLayout的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        stackedLayout = QStackedLayout()        self.setLayout(stackedLayout)  #一般先设置它        label1= QLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        label4= QLabel("标签4")        label4.setStyleSheet("background-color:cyan;")        label5= QLabel("标签5")        label5.setStyleSheet("background-color:blue;")        v_layout = QVBoxLayout()        v_layout.addWidget(label4)        v_layout.addWidget(label5)        stackedLayout.addWidget(label1)        stackedLayout.addWidget(label2)        stackedLayout.addWidget(label3)            # label1.hide()  #此时后面的也不会显示出来            # stackedLayout.setStackingMode(QStackedLayout.StackAll)            # label1.hide()  # 此时,如果label1 不显示,它后面的也会显示            # stackedLayout.setStackingMode(QStackedLayout.StackAll)            # label1.setFixedSize(100,100)        if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
View Code

 

信号:

from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("QStackedLayout的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        stackedLayout = QStackedLayout()        self.setLayout(stackedLayout)  #一般先设置它        label1= QLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        label4= QLabel("标签4")        label4.setStyleSheet("background-color:cyan;")        label5= QLabel("标签5")        label5.setStyleSheet("background-color:blue;")        v_layout = QVBoxLayout()        v_layout.addWidget(label4)        v_layout.addWidget(label5)        stackedLayout.addWidget(label1)        stackedLayout.addWidget(label2)        stackedLayout.addWidget(label3)        #轮流显示 各个标签        timer = QTimer(self)        def timeout_slot():            stackedLayout.setCurrentIndex((stackedLayout.currentIndex()+1)%stackedLayout.count())        timer.timeout.connect(timeout_slot)        timer.start(500)        #信号        stackedLayout.currentChanged.connect(lambda val:print(val))if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
View Code
from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("QStackedLayout的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        stackedLayout = QStackedLayout()        self.setLayout(stackedLayout)  #一般先设置它        label1= QLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        label4= QLabel("标签4")        label4.setStyleSheet("background-color:cyan;")        label5= QLabel("标签5")        label5.setStyleSheet("background-color:blue;")        v_layout = QVBoxLayout()        v_layout.addWidget(label4)        v_layout.addWidget(label5)        stackedLayout.addWidget(label1)        stackedLayout.addWidget(label2)        stackedLayout.addWidget(label3)        #信号        stackedLayout.removeWidget(label1)  #此时,后面也会自动显示  if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
View Code

补充 之 尺寸策略:

 

最小建议尺寸!

from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass MyLabel(QLabel):    def minimumSizeHint(self):        return QSize(200,200)  #最小建议尺寸class Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("布局管理器 尺寸策略的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        label1= MyLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        v_layout = QVBoxLayout()        self.setLayout(v_layout)        v_layout.addWidget(label1)        v_layout.addWidget(label2)        v_layout.addWidget(label3)if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
View Code

from PyQt5.Qt import * #刚开始学习可以这样一下导入import sysclass MyLabel(QLabel):    def sizeHint(self):        return QSize(200,200)  #默认建议尺寸class Window(QWidget):    def __init__(self):        super().__init__()        self.setWindowTitle("布局管理器 尺寸策略的学习")        self.resize(400,400)        self.set_ui()    def set_ui(self):        label1= MyLabel("标签1")        label1.setStyleSheet("background-color:red;")        label2= QLabel("标签2")        label2.setStyleSheet("background-color:green;")        label3= QLabel("标签3")        label3.setStyleSheet("background-color:yellow;")        v_layout = QVBoxLayout()        self.setLayout(v_layout)        v_layout.addWidget(label1)        v_layout.addWidget(label2)        v_layout.addWidget(label3)        #现在的需求是:使label1 保持不变,不被拉缩        label1.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)  #水平和垂直都设置不变        #它这个固定尺寸是参照  默认建议尺寸大小来的, 建议尺寸可通过重写 sizeHint 来修改            #如上if __name__ == '__main__':    app =QApplication(sys.argv)    window = Window()    window.show()    sys.exit(app.exec_())
设定 固定策略

 

这里要说一个setFixedSize()  它不管什么策略不策略,它会直接修改,它的优先级是最高的!

 

总结:

以上就是所有的布局管理器! 下面看样式控制:QSS样式表!:

 

转载于:https://www.cnblogs.com/zach0812/p/11402608.html

你可能感兴趣的文章
nginx首页根据IP跳转
查看>>
【2019-08-20】有点目标,有点计划,有点目的
查看>>
【2019-09-10】美,真的跟年龄无关
查看>>
【2019-09-28】少,但更好
查看>>
【2019-09-13】耐心观察是一种技能
查看>>
mysql数据库2-常用命令
查看>>
安卓开发环境搭建(转)
查看>>
Harris角点检测
查看>>
Struts2的处理流程及为Action的属性注入值
查看>>
设计中最常用的CSS选择器
查看>>
Maven项目打包成可执行Jar文件
查看>>
nginx http proxy 正向代理
查看>>
对BFC的总结
查看>>
23醒
查看>>
win7每天出现taskeng.exe进程的解决方案
查看>>
React Children
查看>>
大数据等最核心的关键技术:32个算法
查看>>
Maven多模块项目搭建
查看>>
redis列表list
查看>>
雷林鹏分享: C# 简介
查看>>