PyQt4网格布局

最通用的布局类别是网格布局(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。

原文地址:https://www.cnblogs.com/moonlightpoet/p/5328573.html