本实例环境为PyQt5+Python3.5+ubuntu16
PyQt5布局有垂直布局(控件从上到下排列),水平布局(控件从左到右排列),表单布局( 将两个空间对应一起布局)等布局,本实例通过创建QFormLayout布局将QLabel(标签)和QLineEdit(行编辑器)一一对应起来,label1对应lineEdit1水平排列起来,即label1和lineEdit1是一个整体,然后再将QFormLayout作为一个整体布局嵌入到水平布局和垂直布局中,本实例中用一个水平布局hbox将gridlayout1和gridlayout2设置为水平布局,所以labe1 lineEdit1,label2,lineEdit2就会呈现处水平布局,然后用一个垂直布局vbox将gridlayout3和gridlayout4设置为垂直布局,所以label3 lineEdit3和label4 lineEdit4呈现出垂直布局,最后用一个垂直布局vlayout将hbox水平布局和vbox垂直布局(此时vbox作为一个整体,hbox作为一个整体)设置成垂直布局并且显示这个vlayout布局
总结: PyQt5布局类似于一个沙箱式的布局,把每一个布局当成一个箱子,箱子里面可以装控件也可以装箱子,箱子里的箱子又可以装箱子和控件,一直无限循环下去,通过这种方式我们可以组合处各种各样的布局
from PyQt5.QtWidgets import QApplication, QLineEdit, QLabel, QFormLayout, QHBoxLayout, QVBoxLayout
from PyQt5 import QtWidgets
class FormLayout(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
self.setWindowTitle('表单+水平+垂直布局综合演示')
#添加标签
label1 = QLabel('label1')
label2 = QLabel('label2')
label3 = QLabel('label3')
label4 = QLabel('label4')
#添加行编辑器
lineEdit1 = QLineEdit()
lineEdit2 = QLineEdit()
lineEdit3 = QLineEdit()
lineEdit4 = QLineEdit()
#添加表单布局
gridlayout1 = QFormLayout()
gridlayout2 = QFormLayout()
gridlayout3 = QFormLayout()
gridlayout4 = QFormLayout()
gridlayout1.addRow(label1, lineEdit1)
gridlayout2.addRow(label2, lineEdit2)
gridlayout3.addRow(label3, lineEdit3)
gridlayout4.addRow(label4, lineEdit4)
#添加水平布局
hbox = QHBoxLayout()
hbox.addLayout(gridlayout1)
hbox.addLayout(gridlayout2)
#添加垂直布局
vbox = QVBoxLayout()
vbox.addLayout(gridlayout3)
vbox.addLayout(gridlayout4)
#添加布局
vlayout = QVBoxLayout() #整个程序的灵魂,将QVBoxLayout改成QHBoxLayout可以改变hbox和vbox的布局从垂直布局到水平布局
vlayout.addLayout(hbox)
vlayout.addLayout(vbox)
self.setLayout(vlayout)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
qb = FormLayout()
qb.show()
sys.exit(app.exec_())
效果: