当朋友向我推荐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. lvs负载简介,原理,常见使用案例及Keepalived高可用

    Lvs简介 基础概念 LVS(Linux Virtual Server)即Linux虚拟服务器,是由张文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中(2.6及以上版本内核) ...

  2. php 获取时间相差的月份和天数

    function getMonthAndDay($date1,$date2){ $datestart= date('Y-m-d',strtotime($date1)); if(strtotime($d ...

  3. 阅源-jdk8-FunctionalInterface注解

    package java.lang; import java.lang.annotation.*; /** * An informative annotation type used to indic ...

  4. haproxy 思考

    通过代理服务器在两个TCP接连之间转发数据是一个常见的需求,然后通常部署的时候涉及到(虚拟)服务器.真实服务器.防护设备.涉及到多个ip地址相关联,改动一个IP就需要修改配置. 比如反向服务器部署的时 ...

  5. JAVA程序员工作常用英语(细心整理)

    基础----进阶 A. array数组accessible 可存取的 area面积audio 音频 addition 加法 action 行动 arithmetic 算法adjustment 调整 a ...

  6. Spring之事务源码

    对@Transactional注解的类进行动态代理 同前文<Spring AOP源码分析>中分析动态代理入口一样,都是在initializeBean时执行. Object exposedO ...

  7. 字典序问题(Java)

    Description 在数据加密和数据压缩中常需要对特殊的字符串进行编码.给定的字母表A由 26 个小写英文字母组成A={a,b,-,z}.该字母表产生的升序字符串是指字符串中字母按照从左到右出现的 ...

  8. Redis 用的很溜,了解过它用的什么协议吗?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  9. C# 中的本地函数

    今天我们来聊一聊 C# 中的本地函数.本地函数是从 C# 7.0 开始引入,并在 C# 8.0 和 C# 9.0 中加以完善的. 引入本地函数的原因 我们来看一下微软 C# 语言首席设计师 Mads ...

  10. MathType中余弦函数的输入

    余弦函数是三角函数中十分重要的一个知识点,余弦函数的俩种形式分别为a2=b2+c2-2bccosA和cosA=(b2+c2-a2)/2bc,接下来我们分别介绍一下这俩种形式的输入. 具体步骤如下: 步 ...