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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM