075.PyQt5_QBoxLayout_盒子布局基类

  

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

  • 描述
    • 提供水平或垂直方向的布局管理器
    • 一般很少直接用,会选择用两个封装好的子类QHBoxLayout和QVBoxLayout
  • 功能作用
    QBoxLayout(QBoxLayout.Direction, parent: QWidget = None)
    # parent一般都不写
    # 参数:QBoxLayout.Direction方向
    #       QBoxLayout.LeftToRight          # 从左到右水平布局
    #       QBoxLayout.RightToLeft          # 从右到左水平布局
    #       QBoxLayout.TopToBottom          # 从上到下垂直布局
    #       QBoxLayout.BottomToTop          # 从下到上垂直布局
    
    • 构造函数
    • 父控件方法
      • 元素之间的间距
        setSpacing(int)                 # 设置元素与元素之间的间距
        spacing -> int                 # 获取元素与元素之间的距离
        
      • 设置外边距
        setContentsMargins(int leftt,int top , int right, int bottom)           # 设置子控件与父控件边框之间的距离左、上、右、下
        
        contentsMargins() ->QMargins                                            # 获取子控件与父控件边框之间的距离
        # 在大多数平台上,边距在所有方向上都是11像素
        
      • 添加子控件
        addWidget(QWidget w)                                                    # 添加子控件
        
      • 替换子控件
        replaceWidget(self, QWidget, QWidget, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> QLayoutItem
        # 被替换的控件,不再被此布局管理,需要将其隐藏、删除或者重新添加到新的布局中
        # 通过QWidget.hide() 隐藏子控件,调用show()方法会让子控件再次参与布局
        # 如果需要删除(释放)该控件,可以通过让其不再被任何控件引用,即将其父控件取消(父对象设置为空)QWidget.setParent(None)
        
      • 添加子布局
        addLayout(QLayout layout)                   # 添加子布局管理器
        
      • 能用性
        setEnabled(bool)                            # 设置布局管理器是否生效
        isEnabled()->bool                           # 判断布局管理器是否生效
        
    • 修改方向
      setDirection(self, QBoxLayout.Direction)        # 设置布局方向
      direction()->QBoxLayout.Direction               # 获取布局方向
      
    • 添加元素
      • 添加控件
        # 添加控件的同时设置伸缩因子(尺寸占比)
        addWidget(self, QWidget, stretch: int = 0, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment()) 
        
        # 插入控件到指定索引位置的同时设置伸缩因子(尺寸占比)
        insertWidget(self, int, QWidget, stretch: int = 0, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = Qt.Alignment())
        
      • 添加子布局
        # 添加子布局的同时设置伸缩因子(尺寸占比)
        addLayout(self, QLayout, stretch: int = 0)
        
        # 插入子布局到指定索引位置的同时设置伸缩因子(尺寸占比)
        insertLayout(self, int, QLayout, stretch: int = 0)
        
      • 替换控件
        # 父类的方法
        replaceWidget(self, QWidget, QWidget, options: Union[Qt.FindChildOptions, Qt.FindChildOption] = Qt.FindChildrenRecursively) -> QLayoutItem
        # 被替换的控件,不再被此布局管理,需要将其隐藏、删除或者重新添加到新的布局中
        # 通过QWidget.hide() 隐藏子控件,调用show()方法会让子控件再次参与布局
        # 如果需要删除(释放)该控件,可以通过让其不再被任何控件引用,即将其父控件取消(父对象设置为空)QWidget.setParent(None)
        
      • 移除控件
        removeWidget(self, QWidget)                         # 移除子控件
        # 被移除的控件,不再被此布局管理,需要将其隐藏、删除或者重新添加到新的布局中
        # 如果需要删除(释放)该控件,可以通过让其不再被任何控件引用,即将其父控件取消(父对象设置为空)QWidget.setParent(None)
        
        QWidget.hide()                                      # 隐藏子控件
        # 通过QWidget.hide() 隐藏子控件,调用show()方法会让子控件再次参与布局
        
        
      • 添加空白
        addSpacing(self, int)                               # 在最后位置添加指定宽度的空白
        insertSpacing(self, int, int)                       # 在指定索引位置插入指定宽度的空白
        
        • 设置元素间的间距是调整所有元素之间的间距
        • 添加空白可以修改指定两个元素之间的距离
      • 添加空白伸缩因子(弹簧)
        addStretch(self, stretch: int = 0)                  # 在最后位置添加空白伸缩因子的同时设置尺寸占比
        insertStretch(self, int, stretch: int = 0)          # 在指定索引位置插入空白伸缩因子的同时设置尺寸占比
        
        stretch(self, int) -> int                           # 获取指定索引位置的空白伸缩因子,返回其尺寸占比
        
        • 当父控件尺寸不够大时,空白伸缩因子尺寸会被压缩为0
        • 当伸缩因子和子控件都不设置占比时,伸缩因子占比优先,即会将控件压缩到最小尺寸
      • 注意:插入元素时,索引位置只会根据插入元素时计算已有的元素索引
    • 设置伸缩因子
      setStretch(self, int, int)                              # 给指定索引位置的元素设置伸缩因子的同时设置占比
      setStretchFactor(self, QWidget, int) -> bool            # 给指定子控件设置伸缩因子的同时设置占比,返回是否成功
      setStretchFactor(self, QLayout, int) -> bool            # 给指定子布局设置伸缩因子的同时设置占比,返回是否成功
      
      # 当子控件/子布局不由当前布局管理器管理则会设置失败,返回False
      
    • 设置边距
      setContentsMargins(self, int, int, int, int)            # 设置外边距
      setSpacing(self, int)                                   # 设置内边距,元素与元素之间的距离
      

  • 代码示例
  • 示例1:QLayout\QBoxLayout-功能作用
  • QLayout是抽象类,不能直接实例化。只能通过子类化示例
    from PyQt5.Qt import *
    import sys
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QBoxLayout-功能作用')
            self.resize(500, 500)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
    
        def add_widget(self):
            # 创建子控件
            labe1 = QLabel('标签1')
            labe1.setStyleSheet('background-color: cyan;')
            labe2 = QLabel('标签2')
            labe2.setStyleSheet('background-color: yellow;')
            labe3 = QLabel('标签3')
            labe3.setStyleSheet('background-color: green;')
    
            labe4 = QLabel('标签4')
            labe4.setStyleSheet('background-color: red;')
            labe5 = QLabel('标签5')
            labe5.setStyleSheet('background-color: blue;')
            labe6 = QLabel('标签6')
            labe6.setStyleSheet('background-color: orange;')
    
            labe7 = QLabel('标签7')
            labe7.setStyleSheet('background-color: yellow;')
            labe8 = QLabel('标签8')
            labe8.setStyleSheet('background-color: orange;')
    
            # 1. 创建布局管理器
            layout = QBoxLayout(QBoxLayout.LeftToRight)        # 从左到右,水平布局
            # layout = QBoxLayout(QBoxLayout.RightToLeft)        # 从右到左,水平布局
            # layout = QBoxLayout(QBoxLayout.TopToBottom)        # 从上到下,垂直布局
            # layout = QBoxLayout(QBoxLayout.BottomToTop)        # 从下到上,垂直布局
    
            # 2. 将布局管理器设置给父控件
            self.setLayout(layout)
    
            # 3. 将子控件添加到布局管理器中
            # layout.addWidget(labe1)
            # layout.addWidget(labe2)
            # layout.addWidget(labe3)
    
            pass    # 父控件的功能作用
            # pass    # 设置元素之间的距离
            # layout.setSpacing(20)
            #
            # pass    # 设置外边距
            # layout.setContentsMargins(10, 20, 30, 40)
            #
            # pass    # 添加子控件
            # layout.addWidget(labe4)
            #
            # pass    # 替换子控件
            # layout.replaceWidget(labe4, labe5)
            # # labe4.hide()
            # labe4.setParent(None)
            #
            # pass    # 添加子布局
            # # 创建布局管理器
            # v_layout = QBoxLayout(QBoxLayout.TopToBottom)
            # # 添加子控件到布局管理器中
            # v_layout.addWidget(labe4)
            # v_layout.addWidget(labe6)
            # # 主布局管理器添加子布局管理器
            # layout.addLayout(v_layout)
            #
            # pass    # 布局管理器可用性
            # # layout.setEnabled(False)
    
            # pass    # 修改方向
            layout.setDirection(QBoxLayout.TopToBottom)
            #
            # pass    # 添加子控件
            # # # 添加子控件的同时设置伸缩因子
            # # layout.addWidget(labe4, 1)
            # # 在指定索引位置插入子控件的同时设置伸缩因子
            # layout.insertWidget(1, labe4, 1)
            #
            # pass    # 添加子布局
            # h_layout = QBoxLayout(QBoxLayout.LeftToRight)
            # h_layout.addWidget(labe5)
            # h_layout.addWidget(labe6)
            #
            # # # 添加子布局的同时设置伸缩因子
            # # layout.addLayout(h_layout, 2)
            # # 在指定索引位置插入子布局的同时设置伸缩因子
            # layout.insertLayout(0, h_layout, 2)
            #
            # pass    # 替换控件
            # layout.replaceWidget(labe4, labe7)
            # labe4.setParent(None)
            #
            # pass    # 移除控件
            # layout.removeWidget(labe2)
            # # labe2.setParent(None)         # 测试这个好像不设置也没有问题
            # print(labe2.parent())
            #
            # labe7.hide()                    # 隐藏控件
            # labe7.show()                    # 显示控件
    
            pass    # 添加空白
            # 在最后位置添加指定宽度的空白
            # layout.addSpacing(50)
            # 在指定索引位置插入指定宽度的空白
            # layout.insertSpacing(1, 100)
    
            pass    # 伸缩因子
            # 添加子控件的同时设置伸缩因子
            # layout.addWidget(labe1, 1)
            # layout.addWidget(labe2, 1)
            # layout.addWidget(labe3, 1)
            # layout.addWidget(labe4, 1)
            # # 添加空白伸缩因子
            # # layout.addStretch(1)
            # # 在指定索引位置插入空白伸缩因子
            # layout.insertStretch(3, 2)
    
            pass    # 设置伸缩因子
            layout.addWidget(labe1)
            layout.addWidget(labe2)
            layout.addWidget(labe3)
            layout.addWidget(labe4)
    
            h_layout = QBoxLayout(QBoxLayout.LeftToRight)
            h_layout.addWidget(labe5)
            h_layout.addWidget(labe6)
            layout.addLayout(h_layout)
    
            # 给指定索引位置的元素设置伸缩因子
            layout.setStretch(0, 1)
            layout.setStretch(1, 1)
            layout.setStretch(2, 1)
            layout.setStretch(3, 1)
            layout.setStretch(4, 1)
    
            # 给指定子控件设置伸缩因子
            layout.setStretchFactor(labe3, 5)
    
            # 给指定子布局设置伸缩因子
            layout.setStretchFactor(h_layout, 4)
    
            pass    # 设置边距
            # 继承自同父类中的方法
           
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())

076.QHBoxLayout_水平盒子布局

  • 描述
    • 提供水平方向的布局管理器
    • 也可以通过setDirection(self, QBoxLayout.Direction)来修改布局方向
  • 功能作用
    • 构造函数
      QHBoxLayout()
      QHBoxLayout(QWidget)
      
    • 其他全部继承自父类


077.QVBoxLayout_垂直盒子布局

  • 描述
    • 提供垂直方向的布局管理器
    • 也可以通过setDirection(self, QBoxLayout.Direction)来修改布局方向
  • 功能作用
    • 构造函数
      QVBoxLayout()
      QVBoxLayout(QWidget)
      
    • 其他全部继承自父类
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值