zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    变量、内存区域、MDK文件(map、htm)
    全双工与半双工的区别
    4G网络 LTE、 FDD 和TD网络格式区别
    国内4G频段划分
    Nordic老版官网介绍(2018-11-30停止更新)
    无线通信模组产业链及竞争格局分析
    LBS 与 GPS 定位之间的区别
    99%的人都理解错了HTTP中GET与POST的区别(转自知乎)
    goto 的用法
    C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5328573.html
Copyright © 2011-2022 走看看