读Pyqt4教程,带你入门Pyqt4 _003
编程中的一个重要事情是布局管理,布局管理是如何在窗体上摆放窗口组件。可以有两种方式进行管理:绝对定位或使用布局类。
绝对定位
程序员用像素指定每个控件的位置和尺寸。使用绝对定位时,你必须理解几件事情。
- 如果你调整窗体的大小,组件的尺寸和位置并不会改变
- 在不同的平台上,程序可能看起来不一样
- 改变程序的字体可能破坏布局
- 如果你决定改变你的布局,你必须完全重做你的布局,这将是乏味并且浪费时间的
#!/usr/bin/python
# -*- coding: utf- -*- # absolute.py import sys
from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self):
super(Example, self).__init__() self.initUI() def initUI(self):
label1 = QtGui.QLabel('Zetcode', self)
label1.move(, ) label2 = QtGui.QLabel('tutorials for programmers', self)
label2.move(, ) self.setWindowTitle('Absolute')
self.resize(, ) app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
我们简单的调用 move() 方法来定位组件。在我们的 QLabel 例子中,我们用x和y坐标来定位。坐标系统从左上角开始,x值从左到右增长,y值从上到下增长。

图:绝对定位
框布局
使用布局类管理布局更灵活、更实用。这是在窗体上摆放组件的首选方式。基本的布局类是 QHBoxLayout 和 QVBoxLayout ,它们可以横向和纵向排列窗口组件。
假设我们想要摆放两个按钮到右下角。为了创建这样一个布局,我们需要一个水平框和一个垂直框。我们通过增加 延展因素 来创建必要的间隔。
#!/usr/bin/python
# -*- coding: utf- -*- # boxlayout.py import sys
from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self):
super(Example, self).__init__() self.initUI() def initUI(self):
okButton = QtGui.QPushButton("OK")
cancelButton = QtGui.QPushButton("Cancel") hbox = QtGui.QHBoxLayout()
hbox.addStretch()
hbox.addWidget(okButton)
hbox.addWidget(cancelButton) vbox = QtGui.QVBoxLayout()
vbox.addStretch()
vbox.addLayout(hbox) self.setLayout(vbox) self.setWindowTitle('box layout')
self.resize(, ) app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
okButton = QtGui.QPushButton("OK")
cancelButton = QtGui.QPushButton("Cancel")
这里我们创建两个按钮。
hbox = QtGui.QHBoxLayout()
hbox.addStretch(1)
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
我们创建一个水平框布局,增加一个延展因素和两个按钮。
vbox = QtGui.QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)
为了创建所需的布局,我们把水平布局放到垂直布局中。
self.setLayout(vbox)
最后,我们设置窗体的主布局。
QGridLayout
最常用的布局类是网格布局,网格布局把空间划分成行和列。我们使用 QGridLayout 类来创建网格布局。
#!/usr/bin/python
# -*- coding: utf-8 -*- # gridlayout1.py import sys
from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self):
super(Example, self).__init__() self.initUI() def initUI(self):
self.setWindowTitle('grid layout') names = ['Cls', 'Bck', '', 'Close', '', '', '', '/',
'', '', '', '*', '', '', '', '-',
'', '.', '=', '+'] grid = QtGui.QGridLayout() j = 0
pos = [(0, 0), (0, 1), (0, 2), (0, 3),
(1, 0), (1, 1), (1, 2), (1, 3),
(2, 0), (2, 1), (2, 2), (2, 3),
(3, 0), (3, 1), (3, 2), (3, 3 ),
(4, 0), (4, 1), (4, 2), (4, 3)] for i in names:
button = QtGui.QPushButton(i)
if j == 2:
grid.addWidget(QtGui.QLabel(''), 0, 2)
else: grid.addWidget(button, pos[j][0], pos[j][1])
j = j + 1 self.setLayout(grid) app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
在该例子中,我们创建了一个按钮格,增加一个 QLabel 窗口组件来填补一个空白。
grid = QtGui.QGridLayout()
Here we create a grid layout.
if j == 2:
grid.addWidget(QtGui.QLabel(''), 0, 2)
else:
grid.addWidget(button, pos[j][0], pos[j][1])
调用 addWidget() 方法来把窗口组件加到网格中,参数是部件( widget ),行( row )和列( column )数字。

图:网格布局
组件可以在表格中跨越多列或多行,在下一个例子中我们将演示这个。
#!/usr/bin/python
# -*- coding: utf-8 -*- # gridlayout2.py import sys
from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__(self):
super(Example, self).__init__() self.initUI() def initUI(self):
title = QtGui.QLabel('Title')
author = QtGui.QLabel('Author')
review = QtGui.QLabel('Review') titleEdit = QtGui.QLineEdit()
authorEdit = QtGui.QLineEdit()
reviewEdit = QtGui.QTextEdit() 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.setWindowTitle('grid layout')
self.resize(350, 300) app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
grid.addWidget(reviewEdit, 3, 1, 5, 1)
如果我们增加一个窗口组件到网格中,我们可以提供窗口组件的行跨度和列跨度。在这个例子中,我们设置 reviewEdit 占用5行。

图:表格布局2
PyQt4教程这的部分我们致力于布局管理。

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4528022.html
读Pyqt4教程,带你入门Pyqt4 _003的更多相关文章
- 读Pyqt4教程,带你入门Pyqt4 _009
QLineEdit QLineEdit 窗口组件用来输入或者编辑单行纯文本,有撤销/重做,剪切/粘贴和拖放功能. #!/usr/bin/python # -*- coding: utf-8 -*- # ...
- 读Pyqt4教程,带你入门Pyqt4 _005
对话框窗体或对话框是现代GUI应用不可或缺的一部分.dialog定义为两个或多个人之间的交谈.在计算机程序中dialog是一个窗体,用来和程序“交谈”.对话框用来输入数据.修改数据.改变程序设置等等. ...
- 读Pyqt4教程,带你入门Pyqt4 _004
在PyQt4教程的这部分中,我们将探讨应用中事件和信号的发生. 事件是GUI程序的重要部分,由用户或者系统产生.当我们调用应用的 exec_() 方法,应用进入主循环.主循环获取事件并把它们发往对象. ...
- 读Pyqt4教程,带你入门Pyqt4 _002
在这节教程中,我们将创建菜单和工具栏. QMainWindow 类提供应用程序主窗口,可以创建一个经典的拥有状态栏.工具栏和菜单栏的应用程序骨架. 菜单栏 菜单栏是GUI应用程序最明显的部分之一,这是 ...
- 读Pyqt4教程,带你入门Pyqt4 _013
你是否曾经看着应用程序并思考特定的GUI项是如何产生的?大概每位程序员都这样过.然后你能看到你喜欢的GUI库提供的一系列窗口组件,但是你无法找到它.工具包通常仅仅提供最常用的窗口组件,比如按钮.文本组 ...
- 读Pyqt4教程,带你入门Pyqt4 _012
颜色 颜色是指一个代表红(Red).绿(Green).蓝(Blue)(RGB)强度值组合的对象,有效的RGB值在0~255之间.我们可以用多种方式定义颜色,最常用的是RGB十进制或者十六进制值.也可以 ...
- 读Pyqt4教程,带你入门Pyqt4 _010
在PyQt4教程的这部分中,我们讨论拖放操作. 拖放(Drag-and-drop)指的是图形用户界面(Graphical user interface)中,在一个虚拟的对象上按着鼠标键将之拖曳到另一个 ...
- 读Pyqt4教程,带你入门Pyqt4 _006
窗口组件是应用程序的基本构建块.PyQt4编程工具包拥有范围广泛的各种窗口组件.按钮.选择框.滑块.列表框等等,程序员工作所需要的一切.在教程的这部分中,我们将介绍一些有用的窗口组件. QCheckB ...
- 读Pyqt4教程,带你入门Pyqt4 _008
QCalendarWidget QCalendarWidget 提供基于月份的日历窗口组件,它允许用户简单并且直观的选择日期. #!/usr/bin/python # -*- coding: utf- ...
随机推荐
- 请不要浪费你的生命,一文多发推广就用它(OpenWrite)
你我的共同困惑 你是否跟我一样?刚开始尝试写作,自己没有名气,有以下几个困惑: 想要推广自己,想在多个平台发文? 多平台发文之后,想要看各个平台的流量如何? 有了流量,想要引流用户到自己的网站? 网站 ...
- shell之路 Linux核心命令【第一篇】管道符与重定向
输出重定向 命令输出重定向的语法为: command > file 或 command >> file 这样,输出到显示器的内容就可以被重定向到文件.果不希望文件内容被覆盖,可以使用 ...
- 网络流 I - Fox And Dinner CodeForces - 510E
Fox Ciel is participating in a party in Prime Kingdom. There are n foxes there (include Fox Ciel). T ...
- 给大家发个Python和Django的福利吧,不要钱的那种~~~
前言一: 这篇是一个发放福利的文章,但是发放之前,我还是想跟大家聊聊我为什么要发这样的福利. 我第一份工作是做的IT桌面支持,日常工作就是给同事修修电脑.装装软件.开通账号.维护内部系统之类的基础工作 ...
- C语言进阶_变量属性
人们总说时间会改变一些,但实际上这一切还得你自己来. 一.概念详解 变量:计算机语言中储存计算结果,其值可以被修改.通过变量名来访问计算机中一段连续的内存空间. 属性:区别于同类事物的特征. C语言中 ...
- 用ArcGIS?37个Arcmap常用操作技巧可能帮到您
1. 要素的剪切与延伸 实用工具 TASK 任务栏 Extend/Trim feature 剪切所得内容与你画线的方向有关. 2. 自动捕捉跟踪工具 点击Editor工具栏中Snapping来打开Sn ...
- 带你理解【JavaScript】中的继承机制
前文 总所周知,继承是所有OO语言中都拥有的一个共性.在JavaScript中,它的继承机制与其他OO语言有着很大的不同,尽管ES6为我们提供了像面向对象继承一样的语法糖,但是其底层依然是构造函数,所 ...
- python 基础应用3
1.使用while .for循环分别打印字符串s = 'fsufhjshh3hf'中每一个元素. #使用while .for循环分别打印字符串s = 'fsufhjshh3hf'中每一个元素. s = ...
- Windows10系统优化(批处理)
经历过XP.Win7.Vista.Win8之后,Win10有了很大的改变,虽然Win10刚出时,非常糟糕,甚至很长一段时间被认为没有Win7,但是随着Win10的不断优化不断更新,已经慢慢的变得更好了 ...
- TreeSet的两种实现方法:Comparable和Comparator(Java比较器)
Comparable与Comparator实际上是TreeSet集合的两种实现方式,用来实现对象的排序.下边介绍一下两种比较器的使用方法和区别. Comparable称为元素的自然顺序,或者叫做默认顺 ...