第15.5节 PyQt的历史沿革介绍

当朋友向我推荐PyQt时,老猿才知道有这样一个在Python下的开源的图形界面开发工具,当准备学习PyQt安装时,发现要安装sip、PyQt、PyQt-tools,而后还要进行相关配置。老猿很好奇为何是这样的,这三者之间究竟是什么关系?功能分别是什么?因而开始处处查中文和英文的各类资料,发现愈来愈复杂,也愈来愈有趣,并愈来愈以为学习这个是个正确的事情。当花了整整2天最终弄懂了这些事情以后,我以为应该作个系统的总结,使得你们经过一篇文章就能清楚PyQt相关的知识背景。但本文与真正使用PyQt的方法无关,若是对于这些不感兴趣的同仁能够跳过本文。
在介绍PyQt以前,咱们须要介绍Qt,由于从技术上来讲,PyQt就是Qt的一个Python包装器。python

1、 Qt及其历史沿革
Qt是一个C++可视化开发平台,是一个跨平台的C++图形用户界面应用程序框架(C++ GUI),可以为应用程序开发者提供创建图形用户界面所需的功能。它是彻底面向对象的,很容易扩展,可应用于组件编程,并能够用于嵌入式开发。它是目前流行的Linux桌面环境KDE 的基础,是Linux和嵌入式操做系统下的主流图形界面开发环境,其最大优点在于只需编写一次代码,就能编译部署在任何操做系统和硬件上,以及擅长图形界面开发,现在更扩展到移动及嵌入式设备开发。对于商业软件公司来讲极具价值,能够普遍应用于物联网特别是智能汽车、智能制造业等的研发。git

Qt分为商业版和开源版,商业版为商业软件提供开发,而Qt开源版提供了与商业版本一样的功能,在GPL(通用公共许可证)下它是免费的。从Qt 4.5起,Qt增添新开源LGPL(请参考https://baike.baidu.com/item/LGPL/10583469?fr=aladdin)受权选择,而且将Qt源代码库面向公众开放,Qt开发人员可经过为Qt及其相关项目贡献代码、翻译、示例及其余内容。程序员

说到Qt,必须介绍一下Haavard Nord和Eirik Chambe-Eng,二人为挪威特隆赫姆的挪威科技学院计算机科学硕士,因一个超声波图像方面的C++数据库应用程序而在一块儿工做,这个系统须要一个可以在UNIX、Macintosh和Windows上都能运行的图像用户界面。为此1991年二人开始设计、编写了Qt,并在1992年提出了“信号和槽”的设想,这成为了一个简单有效的强大图像用户编程规范。web

1993年Haavard Nord和Eirik Chambe-Eng于 1994年创立Quasar Technologies公司,后改名为TrollTech,而后再改成Trolltech,中文名是“奇趣科技”。2008年奇趣科技被NOKIA收购,改名为Qt Software。数据库

2011年到2012年,诺基亚将Qt软件业务出售给了芬兰IT服务公司Digia;2016年Qt公司从Digita独立出来后,在芬兰上市。编程

2、 PyQt 介绍
关于PyQt的历史老猿找到的很少,只知道开发商是英国的“Riverbank Computing”公司,老猿暂时没有找到看出来“Riverbank Computing”与Qt公司之间的关系,从目前状况来看是没有关系。PyQt的官方网站是http://www.riverbankcomputing.com。服务器

PyQt是一个建立Python GUI应用程序的工具包,是Qt和Python结合的一个产物,能够说是为了将Qt的功能用于Python开发的一个Qt的Python包装器。它是Python编程语言和Qt库的成功融合。PyQt5是一个基于Qt5的Python语言实现,由一组Python模块构成。网络

PyQt可用的类有不少,他们被分红几个模块。 QtCore模块包含核心的非GUI功能。该模块用于时间、文件和目录、各类数据类型、流、网址、MIME类型、线程或进程。QtGui模块包含图形组件和相关的类,例如按钮、窗体、状态栏、工具栏、滚动条、位图、颜色、字体等。QtNetwork模块包含了网络编程的类,这些类容许编写TCP/IP和UDP的客户端和服务器,他们使网络编程更简单,更轻便。QtXml包含使用XML文件的类,这个模块提供了SAX和DOM API的实现。QtSvg模块提供显示的SVG文件的类。可缩放矢量图形(SVG)是一种用于描述二维图形和图形应用程序的XML语言。QtOpenGL模块使用OpenGL库渲染3D和2D图形,该模块可以无缝集成Qt的GUI库和OpenGL库。QtSql模块提供用于数据库的类。框架

3、 PyQt5三大组成系统
PyQt5安装时,须要安装三个包,分别是PyQt5-sip、PyQt五、PyQt5-tools,也就是说PyQt5总体由三大模块组成,分别是:编程语言

  1. PyQt5-sip:sip是RiverBank开发的用于PyQt的Python/C++混合编程解决方案,是Python生成C++接口代码的工具,能实现标准Python和C/C++数据类型之间的自动转换,并支持 Qt signal/slot 系统。
    1)sip是安装、编译PyQt所必须使用的编译工具,所以安装PyQt以前必须安装sip;
    2)sip可以使用C或C++编写的现有库,并使它们成为Python扩展模块,这种扩展模块一般称为库的绑定;
    3)sip包括代码生成器和python模块。使用SIP时,程序员首先要编写一组知足特殊规范的".sip"规范文件,规范文件的格式与C或C++头文件相似,在文件中使用相似于C++的语法描述扩展模块所提供的类型、变量与函数和方法。由于SIP不支持完整的C++语法,不能直接使用C++的头文件做为".sip"文件,另外还需程序员用SIP定义的语法添加一些C++代码中没有的信息。代码生成器处理这些规范文件并生成C或C++代码,而后编译它们,与C、C++库连接后就成为Python扩展模块。Python模块为自动生成的代码提供支持功能。

  2. PyQt5:PyQt5提供支持Qt5各个类的Python模块,是使用C++编写的Python功能模块扩展,查看Python目录下的Lib\site-packages\PyQt5目录,看到的基本都是pyd文件,Python中使用PyQt编写的应用都是经过这些来支持的

  3. PyQt5-tools: 提供相关工具,包括qtdesigner、pyuic、pyrcc等相关工具,其中qtdesigner供开发人员使用设计UI界面,pyuic将图形界面对应的ui文件转换成Python的py文件,而pyrcc则将图形界面使用的资源如图片等的文件转换成py。

本节老猿介绍了Qt和PyQt的基本状况,并说明了PyQt三大构成系统的功能及关系,能够说PyQt是一个兼具C++和Python的跨平台图形化开发工具,老猿才开始想只是用于Python图形化开发的,但现已在考虑是否使用它做为Python和C++接口编程的方向。

老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython

老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 请你们多多支持,点赞、评论和加关注!谢谢!