在使用GRidLayout布局时,其添加组件的有三种方法,方法如下:
QGridLayout.addWidget(QWidget)
QGridLayout.addWidget(QWidget, int, int, Qt.Alignment alignment=0)
QGridLayout.addWidget(QWidget, int, int, int, int, Qt.Alignment alignment=0)
其中四个int类型的参数从左至右分别表示:row(起始行),column(起始列),rowSpan(行跨度),columnSpan(列跨度)
第一个参数为控件名,最后一个参数为对齐方式
下面是组件跨多行多列以及利用QHBoxLayout和QVBoxLayout进行多个布局的的实验
#!/usr/bin/env python
#coding: utf-8
import sys
from PyQt4 import QtGui
class Space(QtGui.QWidget):
def __init__(self):
super(Space, self).__init__()
self.initUI()
def initUI(self):
#添加两个按钮,并将他们作为同一个布局
ok = QtGui.QPushButton('OK',self)
cancel = QtGui.QPushButton('Cancel',self)
button_layout = QtGui.QHBoxLayout()
button_layout.addWidget(ok)
button_layout.addWidget(cancel)
title = QtGui.QLabel('Title')
author = QtGui.QLabel('Author')
review = QtGui.QLabel('Review')
#test = QtGui.QLabel('Test')
titleEdit = QtGui.QLineEdit()
authorEdit = QtGui.QLineEdit()
reviewEdit = QtGui.QTextEdit()
grid = QtGui.QGridLayout()
grid.setSpacing(50) #像素.应为两个组件之间的距离
grid.addWidget(title,0,0) #其中注释的两条语句,是为了验证一个想法:行数从0开始,列数从0开始。开始的代码行数为1,让我纠结了好久
grid.addWidget(titleEdit,0,1)
#grid.addWidget(test,1,2)
grid.addWidget(author, 1, 0)
grid.addWidget(authorEdit, 1, 1)
grid.addWidget(review, 2, 0)
grid.addWidget(reviewEdit, 2, 1, 5, 1)
#布局中添加子布局,一个是button布局,还有一个是grid布局
layout = QtGui.QVBoxLayout()
layout.addLayout(button_layout)
layout.addLayout(grid)
self.setLayout(layout)
self.setWindowTitle('grid layout')
self.resize(350, 300)
def main():
app = QtGui.QApplication(sys.argv)
ex = Space()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()