最通用的布局類別是網格布局(QGridLayout)。該布局方式將窗口空間划分為許多行和列。要創建該布局方式,我們需要使用QGridLayout類。
#!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui class GridLayout(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self) self.setWindowTitle('grid layout') names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+'] grid= QtGui.QGridLayout() pos = [(x, y) for x in range(5) for y in range(4)] for i in range(len(pos)): button = QtGui.QPushButton(names[i]) if i == 2: grid.addWidget(QtGui.QLabel(''), 0, 2) else: grid.addWidget(button, pos[i][0], pos[i][1]) self.setLayout(grid) app = QtGui.QApplication(sys.argv) box = GridLayout() box.show() sys.exit(app.exec_())
效果:
在這個示例中,我們創建了一組按網格布局的按鈕。為了填補bck和Close按鈕之間的空白,我們使用QLabel部件。
grid= QtGui.QGridLayout()
該語句創建了一個網格布局。
if i == 2:
grid.addWidget(QtGui.QLabel(''), 0, 2)
else:
grid.addWidget(button, pos[i][0], pos[i][1])
使用addWidget()方法,我們將部件加入到網格布局中。addWidget()方法的參數依次為要加入到局部的部件,行號和列號。
部件在網格布局中可以跨與多行或多列。我們將在下面的示例中演示該情況。
#!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui class GridLayout(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self) self.setWindowTitle('grid layout') title = QtGui.QLabel('Title') author = QtGui.QLabel('Author') review = QtGui.QLabel('Review') titleEdit = QtGui.QLineEdit() authorEdit = QtGui.QLineEdit() reviewEdit = QtGui.QLineEdit() grid = QtGui.QGridLayout() grid.setSpacing(10) grid.addWidget(title, 1, 0) grid.addWidget(titleEdit, 1, 1) grid.addWidget(author, 2, 0) grid.addWidget(authorEdit, 2, 1) grid.addWidget(review, 3, 0) grid.addWidget(reviewEdit, 3, 1, 5, 1) self.setLayout(grid) self.resize(350, 300) app = QtGui.QApplication(sys.argv) box = GridLayout() box.show() sys.exit(app.exec_())
效果:
grid = QtGui.QGridLayout()
grid.setSpacing(10)
通過以上兩句,我們創建了一個布局管理器,並將該布局管理器中的部件間隔(同行的橫向間隔)設為10個字距。
grid.addWidget(reviewEdit, 3, 1, 5, 1)
我們可以為加入網格布局的部件設置行列跨度,在上面的語句中,我們將reviewEdit部件的行跨度設為5,列跨度設為1。