我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 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)
- 其他全部继承自父类
- 构造函数