PyQt4入门指南
版本1.0翻译hqwfreefly日期2011-5-5
声明:鄙人英文水平有限,若您对文中描述有异议,请以原文为准
分享知识传递快乐
1.PyQt4工具包简介
1.1关于本指南
这是一个入门级的PyQt 指南。其目的在于引导读者快速上手PyQt4工具包。该指南在Linux 环境下创建并通过测试。
关于PyQt
PyQt 是用来创建GUI 应用程序的工具包。它是Python 编程语言与已获得成功的Qt 库的混合体。其中Qt 库是这个星球上最强大的GUI 库之一。PyQt 的是www.riverbankcomputing/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 (可缩放矢量图形,参考/wiki/SVG )文件内容的类。QtOpenGL 模块用于渲染使用OpenGL 库创建的3D 或2D 图形。并且它支持Qt GUI 库和OpenGL 库的无缝结合。QtSql 则库提供了用于操作数据库的类。
1.2使用PyQt4创建入门程序
在本章的PyQt4指南中我们将学习一些基本的功能。我们讲解的速度会很慢,就像是在和一个孩子说话一样。对于一个孩子来说,他迈出的第一步是笨拙迟缓的。同样,对于一个编程新手来说,他接受新事物的过程也会比较的迟缓。但请谨记,没有愚蠢的人,只有懒人和人,并且懒人和人之间可以相互转换。
一个简单的示例
下面的示例代码非常简单,它只显示一个小窗口。然而,我们可以对窗口进行的操作却有很多,比如我们可以修改它的大小、最大化、最小化等。而这些操作却需要大量的代码,由于这些操作在很多程序中都需要用到,所以前人已经写好了这些操作的代码。我们没有必要一遍一遍的重新编写这些代码,因此这些代码对程序员来说是隐藏的。PyQt
是一个高度
抽象的工具包,因此,如果我们使用较底层的工具包来实现相同的功能,下面的示例代码就会增长很多。
#!/usr/bin/python
#simple.py
import sys
from PyQt4import QtGui
app=QtGui.QApplication(sys.argv)
widget=QtGui.QWidget()
widget.setWindowTitle('simple')
widget.show()
<_())
-----------------------------------------------------------------------------------------------------------------import sys
from PyQt4import QtGui
这两句用来载入必须的模块。基本的GUI窗口部件在QtGui模块中。
app=QtGui.QApplication(sys.argv)
每一个PyQt4程序都需要有一个application对象,application类包含在QtGui模块中。sys.argv参数是一个命令行参数列表。Python脚本可以从shell中执行,参数可以让我们选择启动脚本的方式。
widget=QtGui.QWidget()
QWidget部件是PyQt4中所有用户界面类的父类。这里我们使用没有参数的默认构造函数,它没有继承其它类。我们称没有父类的widget为一个window。
resize()方法可以改变窗口部件的大小,在这里我们将其设置为250像素宽,150像素高。
widget.setWindowTitle('simple')
这句用来设置窗口部件的标题,该标题将在标题栏中显示。
widget.show()
show()方法将窗口部件显示在屏幕上。
<_())
最后我们进入该程序的主循环。事件处理从本行语句开始。主循环接受事件消息并将其分发给程序的各个部件。如果调用exit()或主部件被销毁,主循环就会结束。使用it()方法退出可以确保程序可以完整的结束,这种情况下系统的环境变量会记录程序是如何退出的。
也许你会疑惑,为什么exec_()方法会有一个下划线。这是因为exec是Python的关键字,为避免冲突,PyQt使用exec_()替代。
截图:simple
1.3程序图标
程序图标就是一个小图片,通常显示在程序标题栏的左上角。在以下的示例中,我们将学习如何在PyQt中使用程序图标,另外我们还将学习一些新的方法。
#!/usr/bin/python
#icon.py
import sys
from PyQt4import 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()
svg交互图文入门icon.show()
<_())
-----------------------------------------------------------------------------------------------------------------上一个示例采用了面向过程的方法编写。Python语言同时支持面向过程和面向对象两种编程方法。PyQt编程是面向对象的。
class Icon(QtGui.QWidget):
def__init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
面向对象编程中最重要的是类、属性和方法。以上代码中,我们创建了一个名为Icon 的新类,该类继承QtGui.QWidget类。因此我们必须调用两个构造函数——Icon的构造函数
和继承类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 PyQt4import QtGui
from PyQt4import 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))