QBoxLayout盒式布局管理器,可以创建水平或垂直方向的布局管理器,使子部件在水平方向或者垂直方向排成一列,它将所有的空间分成一行盒子,然后将每个部件放入一个盒子中。通常使用的是该类的两个子类QHBoxLayout和QVBoxLayout,因为子类有比较方便的构造函数。
QBoxLayout的方法可以从以下链接查询到:
https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtwidgets/qboxlayout.html?highlight=qboxlayout
QHboxLayout简单示例程序:
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QApplication
from PyQt5.QtWidgets import QLabel
import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
my_widget = QWidget()
layout = QHBoxLayout() # 新建水平布局管理器
h_label_1 = QLabel('这是水平label:1') # 新建两个label,加到QHBoxLayout中
h_label_2 = QLabel('这是水平label:2')
layout.addWidget(h_label_1) # 向QHBoxLayout添加label1
layout.addWidget(h_label_2) # 向QHBoxLayout添加label2
my_widget.setLayout(layout) # widget上应用QHBoxLayout布局
my_widget.show()
sys.exit(app.exec_())
VBoxLayout与此类似。
基本原理是把窗口划分为若干单元格,每个子部件被放置于一个或多个单元格之中,各单元格的大小可由拉伸因子和一行或列中单元格的数量来确定。若子部件的大小小于单元格,则可以设置该子部件位于单元格的什么位置,例如顶部、左侧、底部等。还可以设置该子部件是否可以拉伸以填满该单元格等等。
前面所介绍的QBoxLayout,可以看成是只有一行一列的网格布局。
以上属性用于获取或设置垂直和水平方向子部件之间的间距。 以上属性其实设置的是
spcing 属性(注意:不是 QSpacerItem),布局不会为这些间距分配索引号。
QGridLayout 简单示例如下:
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
from PyQt5.QtWidgets import QFontComboBox, QPushButton, QTextEdit
import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
my_widget = QWidget()
my_font_combo_box = QFontComboBox()
my_push_btn = QPushButton()
my_text_edit = QTextEdit()
my_grid_layout = QGridLayout()
my_grid_layout.addWidget(my_font_combo_box, 0, 0, 1, 2) # 添加部件,从row 0 column 0开始,占据1行2列
my_grid_layout.addWidget(my_push_btn, 0, 2, 1, 1) # 添加部件,从row 0, column 2开始,占据1行1列
my_grid_layout.addWidget(my_text_edit, 1, 0, 1, 3) # 添加部件,从row 1, column 0开始,占据1行3列
my_widget.setLayout(my_grid_layout)
my_widget.show()
sys.exit(app.exec_())