当朋友向我推荐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. Hopfield Network 霍普菲尔德网络入门

    简介 Hopfield Network (霍普菲尔德网络),是 Hopfield 在1982年提出的一种基于能量的模型,发表的文章是 Neural networks and physical syst ...

  2. Java8 新特性 —— Stream 流式编程

    本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...

  3. 今天的一个SQL题-case语句和decode函数

    数据库表: select * from rec order by rst,game_time; ID GAME_TIME      RST ------ -------------- ---- 2 0 ...

  4. Java—多线程

    一.多线程 原理: 一个cpu内核有"一个指针",由于cpu的频率过高,所以感觉不到卡顿.(伪线程) 二.进程&线程 进程:进程指正在运行的程序.确切的来说,当一个程序进入 ...

  5. Moment.js的常见用法

    Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率.通常是用来获取时间,设置时间,格式化时间,比较时间等操作.  1.获取时间       St ...

  6. 《GNU_makefile》第五章——为规则书写命令

    1. 使用make的命令行参数-n或--just-print,make会只显示要执行的命令,不执行,这样方便调试makefile. 2.执行命令 每写一行命令,make会fork出一个shell进程来 ...

  7. cephfs元数据池故障的恢复

    前言 cephfs 在L版本已经比较稳定了,这个稳定的意义个人觉得是在其故障恢复方面的成熟,一个文件系统可恢复是其稳定必须具备的属性,本篇就是根据官网的文档来实践下这个恢复的过程 实践过程 部署一个c ...

  8. 【翻译】指示器(indicator)的分类

    参考 David Bianco在2015年发布的博文: http://detect-respond.blogspot.com/2013/07/on-misuse-of-indicators.html ...

  9. 头秃了,Spring Boot 自动配置了解一波~

    持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 @SpringBootApplication干了什么? @EnableAutoConfiguration干了什么? 总结 前言 为什么Sprin ...

  10. 光棍节程序员闯关秀writeup

    答题链接https://1111.segmentfault.com/ 第一关 首先当然是右键查看源码啊 点击链接进入下一关 第二关 还是老样子,右键查看源码 这个key是要放在URL链接里敲回车的 第 ...