读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- ...
随机推荐
- Fiddler手机端抓包环境设置与过滤(一)
一.PC端Fiddler设置 1.安装https 证书 打开Fiddler->Tool->Fiddler Options->HTTPS tab,勾选上并Capture HTTPS C ...
- 线段树 区间合并 F - Sequence operation
F - Sequence operation 题解:这个题目不是一个特别难的题目,但是呢,写了好久,首先线段树难敲,其次就是bug难找,最后这个代码都被我改的乱七八糟的了,这个有两个地方要注意一下,一 ...
- Cordova 浅析架构的原理
因为项目使用了Cordova,也使用了很长时间.至于有很多hybride框架,为什么我们使用Cordova,这里不做过多的叙述,我们也是根据项目需求来选定的,需要及时更新.还要输出别人SDK等.没有最 ...
- Coursera课程笔记----Write Professional Emails in English----Week 4
Request and Apology Emails(Week 4) How to Write Request Emails Write more POLITELY & SINCERELUY ...
- [hdu5373 The shortest problem]模拟
http://acm.hdu.edu.cn/showproblem.php?pid=5373 思路:按题意来即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 放大镜功能 JS原生写法
********** 希望对大家帮助 我会继续努力的 如果有不对的地方请大家帮忙指出****** 1 [JS 代码] <script> var oBox = document.getEle ...
- 学习docker的一点记录
0x00 docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 ...
- equals(), "== ",hashcode() 详细解释
Object 通用方法容易混淆的定义 先搞清楚各自的定义 "==" 用来判断 相等 equals() 用来判断 等价 hashcode() 用来返回散列值 "==&quo ...
- 常见的DOS命令总结
常用的内部命令有MD.CD.RD.DIR.PATH.COPY.TYPE.EDIT.REN.DEL.CLS.VER.DATE.TIME.PROMPT. 常用的外部命令有DELTREE.FORMAT.DI ...
- Pytorch数据集读取
Pytorch中数据集读取 在机器学习中,有很多形式的数据,我们就以最常用的几种来看: 在Pytorch中,他自带了很多数据集,比如MNIST.CIFAR10等,这些自带的数据集获得和读取十分简便: ...