zoukankan      html  css  js  c++  java
  • 布局管理之 QStackedLayout (堆 布局)

    QStackedLayout 描述:

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

    QStackedLayout 功能作用:

    构造函数:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class 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 sys
    
    class 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 sys
    
    class 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 sys
    
    class 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 sys
    
    class 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 sys
    
    class 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 sys
    
    class 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/11403843.html

  • 相关阅读:
    [HTML] IE=edge,chrome=1的META标签详解
    [FFmpeg] ffmpeg 常用命令
    rsyncd 配置使用
    httpd配置
    ftp利用脚本添加本地用户
    zabbix监控概念
    搭建本地yum源并定时同步
    linux添加lvm磁盘大小,命令行创建swap
    500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    利用saltstack批量安装clamav杀毒软件
  • 原文地址:https://www.cnblogs.com/zach0812/p/11402608.html
Copyright © 2011-2022 走看看