zoukankan      html  css  js  c++  java
  • 布局管理之 QBoxLayout (盒子布局)

    QBoxLayouot 的描述:

    其实,它也一般不单独使用,它有两个子类QHBoxLayout  和 QVBoxLayout ,

    但是,也可以强行的使用它,不过构造函数中要指定 QBoxLayout.Direction  。

    其实两个子类中的功能都是在这个基类中。

    QBoxLayout的功能作用:

    QBoxLayout的功能作用之修改方向:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.BottomToTop)
    
            boxLayout.addWidget(label1)
            boxLayout.addWidget(label2)
            boxLayout.addWidget(label3)
    
            #修改方向
            timer = QTimer(self)
            def timeout_slot():
                boxLayout.setDirection((boxLayout.direction()+1)%4)
                pass
            timer.timeout.connect(timeout_slot)
            timer.start(1000)
    
            
    
    
    
            self.setLayout(boxLayout)
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    修改方向

    QBoxLayout的功能作用之添加元素:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.BottomToTop)
    
            boxLayout.addWidget(label1)
            boxLayout.addWidget(label2)
            boxLayout.addWidget(label3)
    
            #添加元素
            label4= QLabel("标签4")
            label4.setStyleSheet("background-color:cyan;")
            label5= QLabel("标签5")
            label5.setStyleSheet("background-color:blue;")
            #添加widget
                # boxLayout.insertWidget(1,label4)
            #添加layout
                # mylayout = QBoxLayout(QBoxLayout.LeftToRight)
                # mylayout.addWidget(label4)
                # mylayout.addWidget(label5)
                #
                # boxLayout.insertLayout(2,mylayout)
            #替换
    
            #移除label1
                # boxLayout.removeWidget(label1)
                # label1.hide()
    
    
    
            self.setLayout(boxLayout)
    
    
    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("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.BottomToTop)
    
            boxLayout.addWidget(label1)
            #添加空白  (空白大小不会随着缩放而变化)
                # boxLayout.addSpacing(100)  # setspacing 是给每一个设置
            boxLayout.addWidget(label2)
            boxLayout.addWidget(label3)
    
            #插入空白
                # boxLayout.insertSpacing(1,100)
    
            self.setLayout(boxLayout)
    
            return None
    
    
    
            #添加元素
            label4= QLabel("标签4")
            label4.setStyleSheet("background-color:cyan;")
            label5= QLabel("标签5")
            label5.setStyleSheet("background-color:blue;")
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    添加,插入空白
    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.TopToBottom)
    
            boxLayout.addWidget(label1,1)
            #添加伸缩 因子  (弹簧)
            boxLayout.addStretch(2)  #这里需要注意的是,当空间被压缩的很小的时候,压缩因子就失效了
            boxLayout.addWidget(label2,2)
            boxLayout.addWidget(label3,2)
    
    
            self.setLayout(boxLayout)
    
            return None
    
    
    
            #添加元素
            label4= QLabel("标签4")
            label4.setStyleSheet("background-color:cyan;")
            label5= QLabel("标签5")
            label5.setStyleSheet("background-color:blue;")
    
    
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    伸缩因子(弹簧)

    QBoxLayout的功能作用之设置伸缩(添加弹簧):

    要注意下面的情况(构造函数中没有使用伸缩因子这个参数时):

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.TopToBottom)
    
            boxLayout.addWidget(label1)
            boxLayout.addStretch()  #加了个弹簧,其他控件是 建议的宽度  
            boxLayout.addWidget(label2)
            boxLayout.addWidget(label3)
    
    
            self.setLayout(boxLayout)
    
            return None
    
    
            #添加元素
            label4= QLabel("标签4")
            label4.setStyleSheet("background-color:cyan;")
            label5= QLabel("标签5")
            label5.setStyleSheet("background-color:blue;")
    
    
    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("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.TopToBottom)
    
            boxLayout.addWidget(label1)
            boxLayout.addStretch()  #加了个弹簧,其他控件是 建议的宽度
            boxLayout.addWidget(label2)
            boxLayout.addStretch()  #加了个弹簧,其他控件是 建议的宽度
            boxLayout.addWidget(label3)
    
    
            self.setLayout(boxLayout)
    
            return None
    
    
    
            #添加元素
            label4= QLabel("标签4")
            label4.setStyleSheet("background-color:cyan;")
            label5= QLabel("标签5")
            label5.setStyleSheet("background-color:blue;")
    
    
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QBoxLayout的功能作用之设置伸缩因子:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QBoxLayout 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            label1= QLabel("标签1")
            label1.setStyleSheet("background-color:red;")
            label2= QLabel("标签2")
            label2.setStyleSheet("background-color:green;")
            label3= QLabel("标签3")
            label3.setStyleSheet("background-color:yellow;")
    
            #
            boxLayout = QBoxLayout(QBoxLayout.TopToBottom)
    
            boxLayout.addWidget(label1)
            boxLayout.addStretch()  #加了个弹簧,其他控件是 建议的宽度
            boxLayout.addWidget(label2)
            boxLayout.addStretch()  #加了个弹簧,其他控件是 建议的宽度
            boxLayout.addWidget(label3)
    
            #设置伸缩因子  子控件
                # boxLayout.setStretchFactor(label2,1)
            #设置伸缩因子  子布局
                # mylayout = QBoxLayout(QBoxLayout.LeftToRight)
                # label4= QLabel("标签4")
                # label4.setStyleSheet("background-color:cyan;")
                # label5= QLabel("标签5")
                # label5.setStyleSheet("background-color:blue;")
                #
                # mylayout.addWidget(label4)
                # mylayout.addWidget(label5)
                #
                # boxLayout.addLayout(mylayout)
                # #给子布局添加伸缩因子
                # boxLayout.setStretchFactor(mylayout,1)
    
            self.setLayout(boxLayout)
    
            return None
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QBoxLayout的功能作用之边距:

    总结:

    到此,就是QBoxLayout  , 而且他的两个子类和它几乎都是差不多(差别仅仅是构造的时候是否传入方向而已)

    下面要说的是:QFormLayout 表单布局:https://www.cnblogs.com/zach0812/p/11400796.html

  • 相关阅读:
    C标准库函数实现
    每天一句话
    移植数码相框到arm开发板上
    数据管理
    perl 分割文件路径和文件名
    恶补英语 拿 The C programming language 练功
    英语学习 chapter1
    uboot 烧写过程
    MVC,去掉字符串中的html代码
    排序之希尔排序
  • 原文地址:https://www.cnblogs.com/zach0812/p/11400042.html
Copyright © 2011-2022 走看看