PyQt5中实现垂直布局,主要使用QVBoxLayout
类。该布局管理器将子控件垂直排列,并可以根据需要自动调整大小。使用QVBoxLayout
可以方便地构建从上到下排列的界面元素。
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButton
class myWindow(QWidget): # 相当于self == w=QWidget()
def __init__(self):
super().__init__()
self.resize(400, 200)
self.setWindowTitle('垂直布局')
# 创建一个垂直布局
layout = QVBoxLayout()
# 第一个伸缩空间,伸缩因子为1
layout.addStretch(1)
# 添加第一个按钮
btn1 = QPushButton("按钮1")
layout.addWidget(btn1)
# 第二个伸缩空间,伸缩因子为1
layout.addStretch(1)
# 添加第二个按钮
btn2 = QPushButton("按钮2")
layout.addWidget(btn2)
# 第三个伸缩空间,伸缩因子为1
layout.addStretch(1)
# 添加第三个按钮
btn3 = QPushButton("按钮3")
layout.addWidget(btn3)
# 第四个伸缩空间,伸缩因子为2
layout.addStretch(2)
# 添加第四个按钮
btn4 = QPushButton("按钮4")
layout.addWidget(btn4)
# 第五个伸缩空间,伸缩因子为2
layout.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
之间的空间将是其他伸缩空间的两倍大。 - 但是,需要注意的是,如果窗口的大小刚好足够容纳所有小部件而不留有多余空间,那么伸缩空间实际上就不会有任何效果,因为没有空间可以分配