布局管理是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()