PyQt5 QVBoxLayout垂直布局详解与addStretch伸缩量应用

Mia
Mia
发布时间:2026-10-13 | 2人浏览过
原创

本文详细介绍PyQt5中QVBoxLayout垂直布局控件的使用方法,通过实例演示如何按从上到下顺序添加控件。重点解析addStretch()函数的作用,即通过设置伸缩量按比例分配剩余空间,实现控件间距自适应或固定对齐。包含多个代码示例与界面效果对比,帮助开发者掌握布局管理器的灵活应用。

QVBoxLayout是PyQt5中用于垂直布局管理的控件类。

该类的主要功能是按照从上到下的顺序将控件添加到布局中。

本节内容相对简短,主要通过两个具体实例来演示QVBoxLayout(垂直布局)的实际使用方式。

以下是QVBoxLayout的标准使用示例。


import sys
from PyQt5.QtWidgets import QApplication ,QWidget ,QVBoxLayout , QPushButton
class Winform(QWidget):
  def __init__(self,parent=None):
    super(Winform,self).__init__(parent)
    self.setWindowTitle("垂直布局管理例子") 
    self.resize(330, 150) 
    # 垂直布局按照从上到下的顺序进行添加按钮部件。
    vlayout = QVBoxLayout()
    vlayout.addWidget( QPushButton(str(1)))
    vlayout.addWidget( QPushButton(str(2)))
    vlayout.addWidget( QPushButton(str(3)))
    vlayout.addWidget( QPushButton(str(4)))
    vlayout.addWidget( QPushButton(str(5)))
    self.setLayout(vlayout)  
if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    form = Winform()
    form.show()
    sys.exit(app.exec_())

程序运行后的初始界面效果如下图所示。

在布局管理中,addStretch()函数用于控制空间分配。

通过调用addStretch()并设置stretch参数,可以指定伸缩量,从而按比例分配布局中剩余的空白空间。

函数 描述
QBoxLayout.addStretch(int stretch=0) addStretch()函数在布局管理器中添加一个可伸缩的控件(QSpaceItem),0为最小值,并且将stretch作为伸缩量添加到布局末尾,stretch参数表示均分的比例,默认为0

下面展示addStretch()在QVBoxLayout中的具体应用实例。

该示例包含一个布局管理器中的三个按钮,目标是使界面在父控件大小改变时,按钮间的相对位置保持固定,不随窗口伸缩而变形。


from PyQt5.QtWidgets import QApplication ,QWidget, QVBoxLayout , QHBoxLayout ,QPushButton
import sys 
class WindowDemo(QWidget): 
  def __init__(self ): 
    super().__init__()
    btn1 = QPushButton(self)
    btn2 = QPushButton(self)
    btn3 = QPushButton(self)   
    btn1.setText('button 1')
    btn2.setText('button 2')
    btn3.setText('button 3')
    hbox = QHBoxLayout()
    # 设置伸缩量为1
    hbox.addStretch(1)
    hbox.addWidget( btn1 )
    # 设置伸缩量为1
    hbox.addStretch(1)
    hbox.addWidget( btn2 )
    # 设置伸缩量为1
    hbox.addStretch(1)
    hbox.addWidget( btn3 )
    # 设置伸缩量为1
    hbox.addStretch(1 )    
    self.setLayout(hbox)
    self.setWindowTitle("addStretch 例子")
if __name__ == "__main__": 
  app = QApplication(sys.argv) 
  win = WindowDemo() 
  win.show() 
  sys.exit(app.exec_())

程序启动后的初始界面效果如下。

拉伸窗口后的界面效果如下。

从上述代码可以看出,使用了四个addStretch()函数。这些伸缩量在按钮之间按1:1:1:1的比例分配,意味着将按钮之外的空白区域等分为四份,并按顺序插入布局管理器。这样,每个控件之间都添加了相同的伸缩量,确保所有控件之间的间距保持一致。

思考:如果仅在第一个控件之前或最后一个控件之后添加一个addStretch(),结果会如何?让我们进行验证。

探究:将addStretch()函数放置在第一个控件之前的情况。


import sys
from PyQt5.QtWidgets import QApplication ,QWidget ,QHBoxLayout , QPushButton
class Winform(QWidget):
  def __init__(self,parent=None):
    super(Winform,self).__init__(parent)
    self.setWindowTitle("水平布局管理例子") 
    self.resize(800, 50)
    # 水平布局按照从左到右的顺序进行添加按钮部件。
    hlayout = QHBoxLayout() 
    # 添加伸缩   
    hlayout.addStretch(0)
    hlayout.addWidget( QPushButton(str(1)) )
    hlayout.addWidget( QPushButton(str(2)) )
    hlayout.addWidget( QPushButton(str(3)))
    hlayout.addWidget( QPushButton(str(4)) )    
    hlayout.addWidget( QPushButton(str(5)) )  
    # 添加伸缩   
    #hlayout.addStretch(1)
    self.setLayout(hlayout)  
if __name__ == "__main__": 
  app = QApplication(sys.argv) 
  form = Winform()
  form.show()
  sys.exit(app.exec_())

运行程序后的界面效果如下。

结果显示,所有控件会向右对齐显示。

类似地,如果将addStretch()放在最后一个控件之后,所有控件会向左对齐显示。

本文主要介绍了PyQt5布局控件QVBoxLayout的详细使用方法及实例,更多关于PyQt5布局控件的使用知识请查看下面的相关链接。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表