当朋友向我推荐PyQt时,老猿才知道有这样一个在Python下的开源的图形界面开发工具,当准备学习PyQt安装时,发现要安装sip、PyQt、PyQt-tools,然后还要进行相关配置。老猿很好奇为什么是这样的,这三者之间到底是什么关系?功能分别是什么?于是开始到处查中文和英文的各种资料,发现越来越复杂,也越来越有趣,并越来越觉得学习这个是个正确的事情。当花了整整2天最终弄懂了这些事情之后,我觉得应该做个系统的总结,使得大家通过一篇文章就能清楚PyQt相关的知识背景。但本文与真正使用PyQt的方法无关,如果对于这些不感兴趣的同仁可以跳过本文。

在介绍PyQt之前,我们需要介绍Qt,因为从技术上来说,PyQt就是Qt的一个Python包装器。

一、 Qt及其历史沿革

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

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年提出了“信号和槽”的设想,这成为了一个简单有效的强大图像用户编程规范。

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

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

二、 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模块提供用于数据库的类。

三、 PyQt5三大组成系统

PyQt5安装时,需要安装三个包,分别是PyQt5-sip、PyQt5、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

请大家多多支持,点赞、评论和加关注!谢谢!

第15.5节 PyQt的历史沿革介绍的更多相关文章

  1. 第15.38节 PyQt(Python+Qt)入门学习:containers容器类部件QDockWidget停靠窗功能详解

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QDockWidget类提供了一个可以停靠在QMainWin ...

  2. 第15.37节 PyQt(Python+Qt)入门学习:containers容器类部件QMdiArea多文档界面部件详解及编程开发案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.引言 老猿在前期学习PyQt相关知识时,对每个组件的属性及方法都研 ...

  3. 第15.30节 PyQt编程实战:通过eventFilter监视QScrollArea的widget()的Paint消息画出scrollAreaWidgetContents的范围矩形

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 在<PyQt(Python+Qt)学习随笔:QScrollArea滚动区域详解> ...

  4. 第15.25节 PyQt(Python+Qt)入门学习:Model/View开发实战--使用QTableView展示Excel文件内容

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在前面的订阅专栏<第十九章.Model/View开发:QTableView的功能及属 ...

  5. 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

    老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...

  6. 第15.9节 PyQt学习入门:使用Qt Designer进行GUI设计的步骤

    在使用Qt Designer进行GUI设计时,一般常规的步骤都是差不多的,主要步骤包括新建显示窗口.在窗口上按照规划的布局放置组件.设置初始化组件的属性.定义信号和槽函数的连接,一般后三步是每增加一个 ...

  7. 第15.7节 PyQt入门学习:PyQt5应用构建详细过程介绍

    一. 引言 在上节<第15.6节 PyQt5安装与配置>结束了PyQt5的安装和配置过程,本节将编写一个简单的PyQt5应用,介绍基本的PyQt5应用的文件组成及相关工具的使用. 本节的应 ...

  8. 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...

  9. 第15.14节 PyQt(Python+Qt)入门学习:Designer的Buttons按钮详解

    一.引言 Qt Designer中的Buttons部件包括Push Button(常规按钮.一般称按钮).Tool Button(工具按钮).Radio Button(单选按钮).Check Box( ...

随机推荐

  1. Python优点与缺点

    优点 简单 -- Python 是一种代表简单主义思想的语言.阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python 的这种伪代码本质是它最大的优点之一.它 ...

  2. char和signed char不同编译器下的使用反思

    遇到一个问题,在使用一个算法的时候出现了仿真正常,但是在使用时出现函数的返回数据只有正值的异常. 在定位算法问题的时候,由算法函数最后的返回值由后向前推,最后发现问题在与char类型的值在不同编译器下 ...

  3. <摘自>飞:jxl简析[ http://www.emlog.net/fei ]

    <摘自>飞:jxl简析:http://www.emlog.net/fei 最近,完成了一个网上报表系统,刚巧用到了一个 JAVA 操作 excel 表格的 API .闲来无事,就将其大概的 ...

  4. MyBatis 中 @Param 注解的四种使用场景

    https://juejin.im/post/6844903894997270536 第一种:方法有多个参数,需要 @Param 注解 第二种:方法参数要取别名,需要 @Param 注解 第三种:XM ...

  5. fork函数拓展

    1.fork之后父子进程共享文件:文件引用计数的值改变,共享偏移. 在下面的例子中test.txt为parentchil.如果子进程没有睡眠,两个进程交叉执行,内容不可预测. 1 #include&l ...

  6. c++实现split

    #include<iostream> #include<vector> #include<algorithm> #include<string> usi ...

  7. 记一次ceph的故障修复(20160408)

    ceph的在正常运行的时候基本不会出现故障,出现故障一般在变动的时候,具体有下面几种可能出现的情形 软件升级 增加存储节点 减少存储节点 调整副本数目 调整pg数目 磁盘出现损坏 节点网络出现异常 以 ...

  8. mysql 创建数据库知识总结

    表设计 库名.表名.字段名必须使用小写字母,"_"分割,且名称长度不超过12个字符并且要做到见名知意. 建议使用InnoDB存储引擎. 存储精确浮点数必须使用DECIMAL替代FL ...

  9. Python_列表相减(判断长度后长的减短的)

    #定义一个方法,可进行列表相减 class V(object): def __init__(self,*value): self.value=value def __sub__(self,other) ...

  10. CSS3之flex布局

    若要使用flex布局,需在父元素上声明" display : flex ",这样它所有的直系子元素就成为flex元素 1.居中 1)垂直居中:align-items : cente ...