PyQt的布局管理(一)

布局管理是GUI程序设计中的一个重要环节,在PyQt4中,使用的布局管理类有QHBoxLayout,QVBoxLayout,QGridLayout 3种,分别水平排列布局,垂直排列布局和表格排列布局。在布局管理中,常见的方法有addWidget()和addLayout()。addWidget()用于在布局中插入控件,addLayout()用于在布局中插入子布局!那么这他们之间的继承关系是什么呢?我们进入python的交互界面利用一些方法可以找到这些关系。具体如下:

>>> help(QtGui.QHBoxLayout)

class QHBoxLayout(QBoxLayout)

 |  QHBoxLayout()

 |  QHBoxLayout(QWidget)


>>> help(QtGui.QVBoxLayout)

class QVBoxLayout(QBoxLayout)
 |  QVBoxLayout()
 |  QVBoxLayout(QWidget)


>>> help(QtGui.QBoxLayout)
class QBoxLayout(QLayout)
 |  QBoxLayout(QBoxLayout.Direction, QWidget parent=None)


>>> help(QtGui.QGridLayout)
class QGridLayout(QLayout)
 |  QGridLayout(QWidget)
 |  QGridLayout()


通过上面的类之间的明确的关系,我们可以得到下图:







此脚本布局使用move方法移动,进行绝对布局。其中QLabel类是标签,是一个显示组件。

#!/usr/bin/env python
#coding: utf-8

#布局管理:如何在窗体上摆放窗口组件
#绝对布局

import sys
from PyQt4 import QtGui

#GUI label组件中需要打印的信息
class Example():
    def display(self):
        self.data = 'this is a test for layout display'


class Qlabel(QtGui.QWidget,Example):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.createLabel()

    def createLabel(self):
        label1 = QtGui.QLabel('Zetcode',self)
        label1.move(10,10)

        emp = Example()     #对父类Example进行实例化
        emp.display()           #调用父类Example的display函数,加载进入内存,使data属性写入实例对象的命名空间字典中!
        char = emp.data #利用char存储data属性值

        label2 = QtGui.QLabel(char,self)
        label2.move(10,40)

        self.setWindowTitle('AbsoluteLayout')
        self.resize(250,150)

def main():
    app = QtGui.QApplication(sys.argv)

    absolute_layout = Qlabel()
    absolute_layout.show()

    app.exec_()

if __name__ == '__main__':
    main()

下面的代码实现的功能和上面是一样 的,但是采用了布局管理类——QHBoxLayout(水平)、QVBoxLayout(垂直)

#!/usr/bin/env python
#coding: utf-8

#布局管理:如何在窗体上摆放窗口组件
#绝对布局

import sys
from PyQt4 import QtGui

#GUI label组件中需要打印的信息
class Example():
    def display(self):

self.data = 'this is a test for layout display' 
    

class Qlabel(QtGui.QWidget,Example):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.createLabel()
    
    def createLabel(self):
        label1 = QtGui.QLabel('Zetcode',self)
#       label1.move(10,10)
    
        emp = Example()     #对父类Example进行实例化
        emp.display()           #调用父类Example的display函数,加载进入内存,使data属性写入实例对象的命名空间字典中!
        char = emp.data #利用char存储data属性值
    
        label2 = QtGui.QLabel(char,self)
#       label2.move(10,40)
    
        layout = QtGui.QVBoxLayout()
        #layout.addStretch(1)
        layout.addWidget(label1)
        layout.addWidget(label2)
    
        self.setLayout(layout)
        self.setWindowTitle('AbsoluteLayout')
        self.resize(250,150)

    
def main():
    app = QtGui.QApplication(sys.argv)
    
    absolute_layout = Qlabel()
    absolute_layout.show()
    
    app.exec_()

if __name__ == '__main__':
    main()



转载于:https://my.oschina.net/yanxiaoshuai/blog/529637

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值