PyQt5中实现垂直布局,主要使用QVBoxLayout
类。该布局管理器将子控件垂直排列,并可以根据需要自动调整大小。使用QVBoxLayout
可以方便地构建从上到下排列的界面元素。
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButtonclass myWindow(QWidget): # 相当于self == w=QWidget()def __init__(self):super().__init__()self.resize(400, 200)self.setWindowTitle('垂直布局')# 创建一个垂直布局layout = QVBoxLayout()# 第一个伸缩空间,伸缩因子为1layout.addStretch(1)# 添加第一个按钮btn1 = QPushButton("按钮1")layout.addWidget(btn1)# 第二个伸缩空间,伸缩因子为1layout.addStretch(1)# 添加第二个按钮btn2 = QPushButton("按钮2")layout.addWidget(btn2)# 第三个伸缩空间,伸缩因子为1layout.addStretch(1)# 添加第三个按钮btn3 = QPushButton("按钮3")layout.addWidget(btn3)# 第四个伸缩空间,伸缩因子为2layout.addStretch(2)# 添加第四个按钮btn4 = QPushButton("按钮4")layout.addWidget(btn4)# 第五个伸缩空间,伸缩因子为2layout.addStretch(2)# 将布局设置给当前QWidget(假设这段代码在QWidget的子类中)self.setLayout(layout)if __name__ == '__main__':app = QApplication(sys.argv)window = myWindow()window.show()app.exec()pass
伸缩因子的作用
- 伸缩因子(stretch factor)决定了当布局有多余空间时,各个伸缩空间应该如何分配这些空间。在您的代码中,
addStretch
方法的参数(即伸缩因子)被设置为1或2。 - 当窗口大小改变时,布局管理器会根据伸缩因子的比例来分配额外的空间。例如,如果您在
btn3
和btn4
之间的伸缩空间(伸缩因子为2)和在其他地方的伸缩空间(伸缩因子为1)之间有多余空间,那么btn3
和btn4
之间的空间将是其他伸缩空间的两倍大。 - 但是,需要注意的是,如果窗口的大小刚好足够容纳所有小部件而不留有多余空间,那么伸缩空间实际上就不会有任何效果,因为没有空间可以分配