liangsheng 发表于 2015-2-8 23:12:10

PyQt ── 使用 GPL 许可协议的 Qt GUI 开源 Python 绑定

PyQt ── 使用 GPL 许可协议的 Qt GUI 开源 Python 绑定
PyQt 是一个创建 GUI 应用程序的工具包。它是 Python 编程语言和 Qt 库的成功融合。Qt 库是目前最强大的 C++ 库之一。PyQt 是 Python 编程语言的 GUI 编程解决方案之一。可代替 Python 的内置 Tkinter。Python GUI 编程的其它替代者,还有 PyGTK、wxPython 等。与 Qt 一样,PyQt 也是自由软件。PyQt 是 PyKDE 的基础。
PyQt 的开发者是英国的 “Riverbank Computing” 公司。与 4.5 版本之前的 Qt 一样,PyQt 提供了 GPL 与商业协议 2 种授权方式;在此之前,GPL 版本只能用于 Unix 上,从 PyQt 版本 4 开始,GPL 许可可用于所有支持平台。因此,PyQt 可免费用于自由软件的开发。不过,目前尚不提供 LGPL 授权方式。PyQt 可运行于 Microsoft Windows、Mac OS X、Linux 及 Unix 操作系统平台。
2009 年 8 月,Qt 开发公司诺基亚发布 PySide,提供与 PyQt 类似的功能,但提供了 LGPL 授权。主要因为 “Riverbank Computing” 不愿以 LGPL 授权发布 PyQt。
自 PyQt 4.5 版后,PyQt 同时支持 Python 2.x 与 Python 3.x。但在 API 方面有区别,最主要的是运行在 Python 3.x 下的 PyQt 不使用 QString,而是 str。另外,之前为避开 Python 2.x 关键词限制的 exec_()、print_() 二函数,现在被重命名为 exec(),print()。
注意:不可同时使用 PyQt4 和 PyQt5 安装程序。 若希望同时安装 PyQt4 和 PyQt5,需从源代码包亲自构建,再安装。

优势
01、PyQt 的 API 与 Qt 类似,Qt 的文档通常仍可用于 PyQt因此,PyQt 的文档比 PyGTK、wxPython、Tkinter 等 GUI 编程库的文档要丰富得多。
02、若程序员有 Qt 经验,一般很快就可过渡到 PyQt而使用 PyQt 的程序员,如同时精通 C++ 的话,也可以很快过渡到 Qt 平台。
03、利用 SIP,大多数为 Qt 开发的控件还可方便 port 到 PyQt然而,SIP 是需要一些学习成本的。
04、有方便的周边工具支持 PyQt譬如:QtDesigner,可用拖拉方式设计界面,简单易用;
Eric4:一个使用 PyQt 设计的 Python IDE,对 PyQt 有特殊支持。
劣势
01、内存泄露 悬挂指针由于 PyQt 同时使用了 Qt 及 Python 的两种内存管理方式;所以,在使用 PyQt 的过程中,要注意避免内存泄露以及悬挂指针。
02、运行时庞大在 Windows 平台,只使用 PyQt.QtCore 与 PyQt.QtGui 两模块时,压缩后至少需要 4.09M。
03、需要学习一些 C++ 知识主要是 C++ 类型、内存管理两方面,以便阅读 Qt 文档和理解 PyQt 行为。
SIP
SIP 是一个为 C 和 C++ 库生成 Python 扩展模块的自动工具。
为方便开发 PyQt,SIP 于 1998 被 “Riverbank Computing” 公司创造出来。不过,SIP 不专用于 PyQt,而是适用于所有的 C 和 C++ 库。
使用 SIP 时,程序员先要编写一特殊 ".sip" 文件,使用类似 C++ 的语法在其中描述扩展模块所提供的类型与函数。然后用 SIP 将这个文件转化为 C++ 代码。最终编译后,与 C、C++ 库链接后就成为了 Python 扩展模块。
".sip" 文件类似于 C、C++ 头文件。根据需要,程序员需用 SIP 定义的语法添加一些 C++ 代码中没有的信息。因为 SIP 不支持完整 C++ 语法,所以不能直接使用 C++ 头文件作为 ".sip" 文件。


模块简介
PyQt 实现了一个 Python 模块集。
PyQt 有超过 300 个类,将近 6000 个函数和方法。PyQt 可用类很多,譬如:
01、QtCore 模块主要包含了一些非 GUI 基础功能,包含事件循环与 Qt 信号机制该模块用于时间、文件、目录、各种数据类型、流、网址、MIME 类型、线程或进程。此外,还提供跨平台 Unicode、内存映射文件、共享内存、正则表达式和用户设置。

02、QtGui 模块包含了大多数 GUI 类型譬如:按钮、文本框、列表、窗体、状态栏、工具栏、滚动条、位图、颜色、字体、等控件。还包含基于 MVC 设计模式的列表、表格、树型控件。同时还提供了一个能够容纳成千上万元素的画布控件,其中可放置各种控件和图形。此外,QtGui 还支持界面动画与界面状态编程。

03、QtNetwork 模块包含网络编程类这些类允许编写非阻塞式 TCP/IP 和 UDP 客户端和服务器,DNS、HTTP 与 FTP 客户端,使网络编程更简单,更轻便。

04、QtOpenGL 模块使用 OpenGL 库渲染 3D 和 2D 图形该模块能无缝集成 Qt GUI 库和 OpenGL 库,不必大量更改代码。

05、QtSql 模块提供了用于数据库的类QtSql 模块支持多种 SQL 数据库,包括 sqlite、ODBC、MySQL、PostgreSQL、Oracle。还提供了一个基于 MVC 模式的数据模型,与 QtGui 的表格控件配合使用。
06、QtXml 包含一个 XML 文件解释器类可同时支持 SAX 和 DOM 两种编程方式。
07、QtWebkit 支持 WebKit 框架
08、QtScript 支持 EMCAScript 脚本语言
09、Phonon 支持高级多媒体编程包含音频播放器、视频播放器与声效处理。
10、uic 可将 Qt 窗体文件转换为 Python 代码能即时读入窗体文件并显示出来。但要依赖 QtXml 模块。
11、QScintilla 包含一个基于 Scintilla 的文本编辑器控件Eric IDE 使用它作为代码编辑器。
12、QtMultimedia 提供底层多媒体支持现多数开发者已改用 Phonon 模块。
13、QtSvg 模块支持 SVG 1.2 Tiny 静态标准,提供 SVG 文件显示、保存支持类可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的 XML 语言。

版本历史

时间版本说明备注
2009.081.0首次发布
2011.07.221.0.5





http://forum.digitser.cn/data/attachment/forum/201605/19/132155fevczeyds5e5y1wy.jpg
长按二维码关注 "德云社区" ,点击最下方 "阅读原文" 了解更多资讯

版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。

页: [1]
查看完整版本: PyQt ── 使用 GPL 许可协议的 Qt GUI 开源 Python 绑定