PyQt5 QVBoxLayout垂直布局详解与addStretch伸缩量应用
本文详细介绍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布局控件的使用知识请查看下面的相关链接。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









