2
1.PyQt4 工具包简介
1.1 关于本指南
这是一个入门级的 PyQt 指南。其目的在于引导读者快速上手 PyQt4 工具包。该指南在
Linux 环境下创建并通过测试。
关于 PyQt
PyQt 是用来创建 GUI 应用程序的工具包。它是 Python 编程语言与已获得成功的 Qt 库
的 混 合 体 。 其 中 Qt 库 是 这 个 星 球 上 最 强 大 的 GUI 库 之 一 。 PyQt 的 官 方 网 站 是
http://www.riverbankcomputing.com/software/pyqt/intro 它由 Phil Thompson 创建。
PyQt 的实现被视作 Python 的一个模块。它由 300 多个类和接近 6000 个函数与方法构
成。作为一个跨平台的工具包,PyQt 可以在所有主流的操作系统上运行(Unix、Windows、
Mac)。PyQt 有两种许可,开发者可以在 GPL 和商业许可证之间做出选择。之前,PyQt 的
GPL 许可证只在 Unix 系统上可用,但在 PyQt4 之后,其 GPL 许可证适用于所有支持它的
系统。
因为 PyQt 有大量的类,为便于管理,它们被划分到如下的几个模块中。
其中 QtCore 模块包含了核心的非 GUI 功能函数,用于以下方面:日期、文件和目录、
数据结构、数据流、URL、MIME、线程和进程。QtGui 模块则包含了绘图组件以及与绘图
相关的类,比如按钮、窗口、状态栏、工具栏、滑块、位图、颜色、字体等。QtNetWork 模
块包含用于网络编程的类,用户可以用这些类实现 TCP/IP 和 UDP 的客户端或服务器。并且
使用这些类会使网络编程更加容易、轻便。QtXml 包含用于处理 XML 文件的类,该模块提
供了 SAX 和 DOM API 两种 XML 文件处理方式的实现。QtSvg 模块包含了用于显示 SVG
(可缩放矢量图形,参考 http://zh.wikipedia.org/wiki/SVG)文件内容的类。QtOpenGL 模块
用于渲染使用 OpenGL 库创建的 3D 或 2D 图形。并且它支持 Qt GUI 库和 OpenGL 库的无缝
结合。QtSql 则库提供了用于操作数据库的类。
1.2 使用 PyQt4 创建入门程序
在本章的 PyQt4 指南中我们将学习一些基本的功能。我们讲解的速度会很慢,就像是
在和一个孩子说话一样。对于一个孩子来说,他迈出的第一步是笨拙迟缓的。同样,对于一
个编程新手来说,他接受新事物的过程也会比较的迟缓。但请谨记,没有愚蠢的人,只有懒
人和人,并且懒人和人之间可以相互转换。
一个简单的示例
下面的示例代码非常简单,它只显示一个小窗口。然而,我们可以对窗口进行的操作却
有很多,比如我们可以修改它的大小、最大化、最小化等。而这些操作却需要大量的代码,
由于这些操作在很多程序中都需要用到,所以前人已经写好了这些操作的代码。我们没有必
要一遍一遍的重新编写这些代码,因此这些代码对程序员来说是隐藏的。PyQt 是一个高度
QtGui
QtCore
QtNetWork
QtSvg
QtSqlQtXml
QtOpenGL
www.linuxidc.com
Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
3
抽象的工具包,因此,如果我们使用较底层的工具包来实现相同的功能,下面的示例代码就
会增长很多。
#!/usr/bin/python
# simple.py
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
widget.show()
sys.exit(app.exec_())
-----------------------------------------------------------------------------------------------------------------
import sys
from PyQt4 import QtGui
这两句用来载入必须的模块。基本的 GUI 窗口部件在 QtGui 模块中。
app = QtGui.QApplication(sys.argv)
每一个 PyQt4 程序都需要有一个 application 对象,application 类包含在 QtGui 模块中。
sys.argv 参数是一个命令行参数列表。Python 脚本可以从 shell 中执行,参数可以让我们选择
启动脚本的方式。
widget = QtGui.QWidget()
QWidget 部件是 PyQt4 中所有用户界面类的父类。这里我们使用没有参数的默认构造函
数,它没有继承其它类。我们称没有父类的 widget 为一个 window。
widget.resize(250, 150)
resize()方法可以改变窗口部件的大小,在这里我们将其设置为 250 像素宽,150 像素高。
widget.setWindowTitle('simple')
这句用来设置窗口部件的标题,该标题将在标题栏中显示。
widget.show()
show()方法将窗口部件显示在屏幕上。
sys.exit(app.exec_())
最后我们进入该程序的主循环。事件处理从本行语句开始。主循环接受事件消息并将其
分发给程序的各个部件。如果调用 exit()或主部件被销毁,主循环就会结束。使用 sys.exit()
方法退出可以确保程序可以完整的结束,这种情况下系统的环境变量会记录程序是如何退出
的。
也许你会疑惑,为什么 exec_()方法会有一个下划线。这是因为 exec 是 Python 的关键字,
为避免冲突,PyQt 使用 exec_()替代。
www.linuxidc.com
Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
4
截图:simple
1.3 程序图标
程序图标就是一个小图片,通常显示在程序标题栏的左上角。在以下的示例中,我们将
学习如何在 PyQt 中使用程序图标,另外我们还将学习一些新的方法。
#!/usr/bin/python
# icon.py
import sys
from PyQt4 import QtGui
class Icon(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('icons/web.png'))
app = QtGui.QApplication(sys.argv)
icon = Icon()
icon.show()
sys.exit(app.exec_())
-----------------------------------------------------------------------------------------------------------------
上一个示例采用了面向过程的方法编写。 Python 语言同时支持面向过程和面向对象两
种编程方法。PyQt 编程是面向对象的。
class Icon(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
面向对象编程中最重要的是类、属性和方法。以上代码中,我们创建了一个名为 Icon
的新类,该类继承 QtGui.QWidget 类。因此我们必须调用两个构造函数——Icon 的构造函数
www.linuxidc.com
Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
5
和继承类 QtGui.QWidget 类的构造函数。
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Icon')
self.setWindowIcon(QtGui.QIcon('icons/web.png'))
setGeometry()方法完成两个功能——设置窗口在屏幕上的位置和设置窗口本身的大小。
它的前两个参数是窗口在屏幕上的 x 和 y 坐标。后两个参数是窗口本身的宽和高。
setWindowIcon()方法用来设置程序图标,它需要一个 QIcon 类型的对象作为参数。调用 QIcon
构造函数时,我们需要提供要显示的图标的路径(相对或绝对路径)。
截图:Icon
1.4 显示提示信息
我们可以为任何窗口部件设置一个气球提示。
#!/usr/bin/python
# tooltip.py
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Tooltip(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Tooltip')
self.setToolTip('This is a <b>QWidget</b> widget')
QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
www.linuxidc.com
Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。
评论0