当朋友向我推荐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. Linux sar命令参数详解

    转载自http://www.chinaz.com/server/2013/0401/297942.shtml sar(System Activity Reporter系统活动情况报告)是目前 Linu ...

  2. Pandas_工资集处理

    import numpy as np import pandas as pd from pandas import Series,DataFrame # 1--读取数据文件 file_obj=open ...

  3. 强迫自己学习Jquery 最喜欢的hitch函数

    用过dojo的人都知道hitch. 通过绑定一个函数的上下文得到一个新函数,当然还能绑定参数 Jquery里没有这个功能,实在太不方便了. 这是我不喜欢用Jquery的第一原因,第二原因是Jquery ...

  4. Tim Urban:如何选择真正适合你的职业?

    Wait But Why是一个专注于写长博客的网站,Tim Urban是网站的创始人之一.Tim Urban专注于写长论文,与时下的轻度阅读完全背道而驰,文章动辄几千甚至上万字,但令人吃惊的是却拥有惊 ...

  5. Go语言内存分配(简述 转)

    在Go语言里,从内存的分配到不再使用后内存的回收等等这些内存管理工作都是由Go在底层完成的.虽然开发者在写代码时不必过度关心内存从分配到回收这个过程,但是Go的内存分配策略里有不少有意思的设计,通过了 ...

  6. tomcat设置好环境变量,依然无法通过cmd startup命令启动

    Windows环境下JDK安装与环境变量配置详细的图文教程 https://www.cnblogs.com/liuhongfeng/p/4177568.html   Windows环境下maven 环 ...

  7. C语言设计模式(应用)

    #ifndef QUEUE_H #define QUEUE_H #define QUEUE_SIZE 10 typedef struct queue { int buffer[QUEUE_SIZE]; ...

  8. pikachs 渗透测试1-环境及暴力破解

    一.安装 PhpStudy20180211,默认安装 1.mysql默认密码是root,因为在虚拟机,保留不动 2.解压pikachs 到 C:\phpStudy\PHPTutorial\WWW\pi ...

  9. JVM学习之Java技术体系

    目录 一.Java技术体系 1.Java体系构成 2.JDK.JRE.JVM之前的关系 JVM介绍 (1)JVM官方文档定义 (2)中文解释 JVM结构 Java代码执行流程 JVM架构模型 1.指令 ...

  10. 面试官:你说你精通源码,那你知道ArrayList 源码的设计思路吗?

    Arraylist源码分析 ArrayList 我们几乎每天都会使用到,但是通常情况下我们只是知道如何去使用,至于其内部是怎么实现的我们不关心,但是有些时候面试官就喜欢问与ArrayList 的源码相 ...