pyside2系列之布局QVBoxLayout和QHBoxLayout

本文详细介绍了Qt中的QVBoxLayout和QHBoxLayout布局管理器,通过四个示例展示了它们在添加控件、设置间距、调整对齐方式等方面的功能,帮助理解如何在GUI设计中灵活运用这两种布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QVBoxLayout 垂直布局,加入该布局的控件在垂直方向上按加入先后顺序排列。

QHBoxLayout 水平布局,加入该布局的控件在水平方向上按加入先后顺序排列。

例子1

import sys
from PySide2.QtWidgets import QApplication, QVBoxLayout, QHBoxLayout, QWidget, QPushButton


class LayoutWnd(QWidget):
    def __init__(self, parent=None):
        super(LayoutWnd, self).__init__(parent)
        self.setFixedSize(600, 400)

        v_layout = QVBoxLayout()  #
        v1_layout = QVBoxLayout()  #
        h_layout = QHBoxLayout()  #

        v1_layout.addWidget(QPushButton('按钮a', self))  #
        v1_layout.addWidget(QPushButton('按钮b', self))
        v1_layout.addWidget(QPushButton('按钮c', self))

        h_layout.addWidget(QPushButton('按钮d', self))  #
        h_layout.addWidget(QPushButton('按钮e', self))
        h_layout.addWidget(QPushButton('按钮f', self))

        v_layout.addLayout(v1_layout)  #
        v_layout.addLayout(h_layout)   #
        v_layout.addWidget(QPushButton("按钮3", self))   #

        self.setLayout(v_layout)  #

 例子2(addStretch)

class LayoutWnd(QWidget):
    def __init__(self, parent=None):
        super(LayoutWnd, self).__init__(parent)
        self.setFixedSize(600, 400)

        v_layout = QVBoxLayout()  
        v1_layout = QVBoxLayout()  
        h_layout = QHBoxLayout()  

        v1_layout.addStretch(1)  #
        v1_layout.addWidget(QPushButton('按钮a', self))  
        v1_layout.addWidget(QPushButton('按钮b', self))
        v1_layout.addWidget(QPushButton('按钮c', self))

        h_layout.addWidget(QPushButton('按钮d', self))  
        h_layout.addWidget(QPushButton('按钮e', self))
        h_layout.addStretch(1)  #
        h_layout.addWidget(QPushButton('按钮f', self))

        v_layout.addLayout(v1_layout)  
        v_layout.addLayout(h_layout)   
        v_layout.addWidget(QPushButton("按钮3", self))  

        self.setLayout(v_layout) 

例子3(addSpacing, setSpacing)

class LayoutWnd(QWidget):
    def __init__(self, parent=None):
        super(LayoutWnd, self).__init__(parent)
        self.setFixedSize(600, 400)

        v_layout = QVBoxLayout()
        v1_layout = QVBoxLayout()
        h_layout = QHBoxLayout()

        v1_layout.addWidget(QPushButton('按钮a', self))
        v1_layout.addWidget(QPushButton('按钮b', self))
        v1_layout.addSpacing(40)  #
        v1_layout.addWidget(QPushButton('按钮c', self))

        h_layout.addWidget(QPushButton('按钮d', self))
        h_layout.addWidget(QPushButton('按钮e', self))
        h_layout.addWidget(QPushButton('按钮f', self))
        h_layout.setSpacing(40)  #

        v_layout.addLayout(v1_layout)
        v_layout.addLayout(h_layout)
        v_layout.addWidget(QPushButton("按钮3", self))

        self.setLayout(v_layout)

 例子4(setContentsMargins)

class LayoutWnd(QWidget):
    def __init__(self, parent=None):
        super(LayoutWnd, self).__init__(parent)
        self.setFixedSize(600, 400)

        v_layout = QVBoxLayout()
        v1_layout = QVBoxLayout()
        h_layout = QHBoxLayout()

        v1_layout.addWidget(QPushButton('按钮a', self))
        v1_layout.addWidget(QPushButton('按钮b', self))
        v1_layout.setContentsMargins(5, 20, 40, 80)  # left, top, right, bottom
        v1_layout.addWidget(QPushButton('按钮c', self))

        h_layout.addWidget(QPushButton('按钮d', self))
        h_layout.addWidget(QPushButton('按钮e', self))
        h_layout.addWidget(QPushButton('按钮f', self))

        v_layout.addLayout(v1_layout)
        v_layout.addLayout(h_layout)
        v_layout.addWidget(QPushButton("按钮3", self))

        self.setLayout(v_layout)

例子5(alignment)

import sys
from PySide2.QtWidgets import QApplication, QVBoxLayout, QHBoxLayout, QWidget, QPushButton
from PySide2.QtCore import Qt


class LayoutWnd(QWidget):
    def __init__(self, parent=None):
        super(LayoutWnd, self).__init__(parent)
        self.setFixedSize(600, 400)

        v_layout = QVBoxLayout()
        v1_layout = QVBoxLayout()
        h_layout = QHBoxLayout()

        v1_layout.addWidget(QPushButton('按钮a', self))
        v1_layout.addWidget(QPushButton('按钮b', self))
        v1_layout.addWidget(QPushButton('按钮c', self))

        h_layout.addWidget(QPushButton('按钮d', self))
        h_layout.addWidget(QPushButton('按钮e', self))
        h_layout.addWidget(QPushButton('按钮f', self), alignment=Qt.AlignRight)  #

        v_layout.addLayout(v1_layout)
        v_layout.addLayout(h_layout)
        v_layout.setAlignment(h_layout, Qt.AlignBottom)   #
        v_layout.addWidget(QPushButton("按钮3", self))

        self.setLayout(v_layout)

上面罗列了常用的一些函数,比如 addStretch, addSpacing, setSpacing, setContentsMargins,可参照对应的界面发生的变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值