PyQt从入门到精通
上QQ阅读APP看书,第一时间看更新

第1章 PyQt5入门

Python是一种语法简洁、功能强大的编程语言,它的应用方向很广,而GUI图形用户界面开发是Python的一个非常重要的方向,PyQt5作为一个跨平台、简单易用、高效的GUI框架,是使用Python开发GUI程序时最常用的一种技术。本章将对Python与PyQt5进行介绍。

1.1 Python语言介绍

1.1.1 了解Python

Python,本义是“蟒蛇”。1989年,荷兰人Guido van Rossum发明了一种面向对象的解释型高级编程语言,将其命名为Python,标志如图1.1所示。Python的设计哲学为优雅、明确、简单,实际上,Python始终贯彻着这一理念,以至于现在网络上流传着“人生苦短,我用Python”的说法。由此可见,Python有着简单、开发速度快、节省时间和容易学习等特点。

图1.1 Python的标志

Python是一种扩充性强大的编程语言,它具有丰富和强大的库,能够把使用其他语言(尤其是C/C++)制作的各种模块很轻松地联结在一起,所以Python常被称为“胶水”语言。

1991年,Python的第一个公开发行版问世。从2004年开始,Python的使用率呈线性增长,逐渐受到编程者的欢迎和喜爱。最近几年,伴随着大数据和人工智能的发展,Python语言越来越火爆,也越来越受到开发者的青睐,如图1.2所示是截至2020年3月的最新一期TIBOE编程语言排行榜,Python排在第3位。

图1.2 2020年3月TIBOE编程语言排行榜

1.1.2 Python的版本

Python自发布以来,主要有3个版本:1994年发布的Python 1.x版本(已过时)、2000年发布的Python 2.x版本(2020年3月已经更新到Python 2.7.17)和2008年发布的3.x版本(2020年6月已经更新到Python 3.8.3)。

1.1.3 Python的应用领域

Python作为一种功能强大的编程语言,因其简单易学而受到很多开发者的青睐。那么Python的应用领域有哪些呢?概括起来主要有以下几个方面。

 Web开发

 大数据处理

 人工智能

 自动化运维开发

 云计算

 爬虫

 游戏开发

例如,我们经常访问的集电影、读书、音乐于一体的创新型社区豆瓣网、国内著名网络问答社区知乎、国际上知名的游戏Sid Meier's Civilization(文明)等都是使用Python开发的。这些网站和应用的效果如图1.3~图1.5所示。

图1.3 豆瓣网首页

图1.4 知乎

很多的知名企业都将Python作为其项目开发的主要语言,比如世界上最大的搜索引擎Google公司、专注编程教育二十年的明日科技、世界最大的短视频网站YouTube和覆盖范围最广的社交网站Facebook等,如图1.6所示。

图1.5 Sid Meier's Civilization(文明)游戏

图1.6 应用Python的公司

说明

Python语言不仅可以应用到网络编程、游戏开发等领域,还在图形图像处理、智能机器人、爬取数据、自动化运维等多方面崭露头角,为开发者提供简约、优雅的编程体验。

1.2 GUI与PyQt5

Python是一门脚本语言,它本身并不具备GUI开发功能,但是由于它强大的可扩展性,现在已经有很多种GUI模块库可以在Python中使用,而这其中,PyQt5无疑是最强大、开发效率最高的一种,本节将对GUI及PyQt5进行介绍。

1.2.1 GUI简介

GUI,又称图形用户接口或者图形用户界面,它是Graphical User Interface的简称,表示采用图形方式显示的计算机操作用户界面。

GUI是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备对计算机进行操作。比如Windows操作系统就是一种最常见的GUI程序,另外,我们平时使用的QQ、处理表格用的Excel、处理图片用的美图秀秀、观看视频时使用的优酷等,都是GUI程序,如图1.7~图1.10所示。

图1.7 QQ软件

图1.8 Office办公软件之Excel

图1.9 美图秀秀软件

图1.10 优酷视频播放软件

1.2.2 什么是PyQt5

PyQt是基于Digia公司强大的图形程序框架Qt的Python接口,由一组Python模块构成,它是一个创建GUI应用程序的工具包,由Phil Thompson开发。

自从1998年首次将Qt移植到Python上形成PyQt以来,已经发布了PyQt3、PyQt4和PyQt5等3个主要版本,目前的最新版本是PyQt 5.14。PyQt5的主要特点如下:

 对Qt库进行完全封装。

 使用信号/槽机制进行通信。

 提供了一整套进行GUI程序开发的窗口控件。

 本身拥有超过620个类和近6000个函数及方法。

 可以跨平台运行在所有主要操作系统上,包括UNIX、Windows和Ma cOS等。

 支持使用Qt的可视化设计器进行图形界面设计,并能够自动生成Python代码。

说明

(1)PyQt5不向下兼容PyQt4,而且官方默认只提供对Python 3.x的支持,如果在Python 2.x上使用PyQt5,需要自行编译,因此建议使用Python 3.x+PyQt5开发GUI程序。

(2)PyQt5采用双许可协议,即GPL和商业许可,自由开发者可以选择使用免费的GPL协议版本,而如果准备将PyQt5用于商业,则必须为此交付商业许可费用。

技巧

GPL协议是GNU General Public License的缩写,它是GNU通用公共授权非正式的中文翻译。使用GPL协议,表示软件版权属于开发者本人,软件产品受国际相关版权法的保护,允许其他用户对原作者的软件进行复制或发行,并且可以在更改之后发行自己的软件,但新软件在发布时也必须遵守GPL协议,不可以对其进行其他附加限制。这里需要说明的一点是,使用GPL协议的软件,不能申请软件产品专利,也就不存在“盗版”的说法。

1.2.3 PyQt5与Qt的关系

Qt(中国区官网:https://www.qt.io/cn)是1991年由挪威的Trolltech公司(奇趣科技)开发的一个基于C++的跨平台GUI库,它包括跨平台类库、集成开发工具和跨平台的IDE。

2008年6月,奇趣科技公司被诺基亚公司收购,Qt成为诺基亚旗下的编程语言工具,从2009年5月发布的Qt 4.5版本开始,诺基亚公司内部Qt源代码库开源。

2011年,芬兰的一家IT业务供应商Digia从诺基亚公司手中收购了Qt的商业版权,而到2012年8月,Digia又从诺基亚公司手中全面收购了Qt的软件业务,并于2013年7月3日正式发布Qt 5.1版本,截至2020年3月,Qt的最新版本为5.14。

Qt的发展历程如图1.11所示。

而PyQt(官网:https://www.riverbankcomputing.com/)则是将Python与Qt融为一体,也就是说,PyQt允许使用Python语言调用Qt库中的API,这样做的最大好处就是在保留了Qt高运行效率的同时,大大提高了开发效率。因为,相对于C++语言来说,Python语言的代码量、开发效率都要更高,而且其语法简单、易学。PyQt对Qt做了完整的封装,几乎可以用PyQt做Qt能做的任何事情。

由于目前最新的PyQt版本是5.14,所以习惯上称PyQt为PyQt5。

图1.11 Qt发展历程

综上所述,PyQt就是使用Python对Qt进行了封装,而PyQt5则是PyQt的一个版本,它们的关系如图1.12所示。

图1.12 PyQt5与Qt的关系

1.2.4 PyQt5的主要模块

PyQt5中有超过620个类,它们被分布到多个模块,每个模块侧重不同的功能。如图1.13所示为PyQt5模块中的主要类及其作用,在使用PyQt5开发GUI程序时,经常会用到这些类。

图1.13 PyQt5模块中的主要类及其作用

图1.14展示了PyQt5中的主要模块及其作用。

说明

图1.14中标的表示常用的PyQt5模块。

技巧

(1)图1.14中提到QtSvg模块主要提供了可用于显示SVG矢量图形文件的类,那么什么是SVG文件呢?SVG是一种可缩放的矢量图形,它的英文全称为Scalable Vector Graphics,是一种用于描述二维图形和图形应用程序的XML语言。SVG图像非常适合于设计高分辨率的Web图形页面,用户可以直接用代码来描绘图像,也可以用任何文字处理工具打开SVG图像,而且可以通过改变部分代码来使图像具有交互功能,并能够随时插入HTML中通过浏览器来观看。

(2)PyQt5的官方帮助地址为:https://www.riverbankcomputing.com/static/Docs/PyQt5/,这是官方提供的在线英语帮助,如果读者有需要,可以查看。

图1.14 PyQt5的主要模块及作用

1.2.5 其他常用GUI开发库

除了PyQt5之外,Python还支持很多可以开发GUI图形界面程序的库,如Tkinter、Flexx、wxPython、Kivy、PySide、PyGTK等,下面对它们进行简单介绍。

1.Tkinter

Tkinter又称“Tk接口”,是一个轻量级的跨平台图形用户界面(GUI)开发工具,是Tk图形用户界面工具包标准的Python接口,可以运行在大多数Unix、Windows和Ma cOS系统中,而且Tkinter是安装Python解释器时自动安装的组件,Python的默认IDLE就是使用Tkinter开发的。

2.Flexx

Flexx是用于创建图形用户界面(GUI)的纯Python工具箱,该工具箱使用Web技术进行渲染。作为跨平台的Python工具,用户可以使用Flexx创建桌面应用程序和Web应用程序,同时可以将程序导出到独立的HTML文档中。

作为GitHub推荐的纯Python图形界面开发工具,它的诞生基于网络,已经成为向用户提供应用程序及交互式科学内容越来越流行的方法。

3.wxPython

wxPython是Python语言的一套优秀的GUI图形库,可以帮助开发人员轻松创建功能强大的图形用户界面的程序。同时wxPython作为优秀的跨平台GUI库wxWidgets的Python封装,具有非常优秀的跨平台能力,可以在不修改程序的情况下在多种平台上运行,支持Windows、Mac OS及大多数的Unix系统。

4.Kivy

Kivy是一款用于跨平台快速应用开发的开源框架,只需编写一套代码便可轻松运行于各大移动平台和桌面上,如Android、iOS、Linux、Ma cOS和Windows等。Kivy采用Python和Cython编写。

5.PySide

PySide是跨平台的应用程序框架Qt的Python绑定版本,可以使用Python语言和Qt进行界面开发。2009年8月,PySide首次发布,提供和PyQt类似的功能,并兼容API。但与PyQt不同的是,它使用LGPL授权,允许进行免费的开源软件和私有的商业软件的开发;另外,相对于PyQt,它支持的Qt版本比较老,最高支持到Qt 4.8版本,而且官方已经停止维护该库。

6.PyGTK

PyGTK是Python对GTK+GUI库的一系列封装,最经常用于GNOME平台上,虽然也支持Windows系统,但表现不太好,所以,如果在Windows系统上开发Python的GUI程序,不建议使用该库。

1.3 小结

本章主要对Python语言及PyQt5进行了介绍,要使用PyQt5开发程序,首先应该了解它,因此,本章首先对PyQt5程序开发的一些基本概念进行了介绍,包括GUI、Qt、PyQt5、PyQt5中的模块等;另外,还对Python中一些常用的其他GUI框架进行了介绍。对于本章知识,读者了解即可。