购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 GUI与PyQt6

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

1.2.1 GUI简介

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

GUI是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备对计算机进行操作,Windows操作系统就是一种最常见的GUI程序。另外,我们平时使用的QQ、Excel、美图秀秀、视频播放软件等,都是GUI程序,如图1.4、图1.5所示。

图1.4 QQ

图1.5 Excel

1.2.2 什么是PyQt6

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

自从1998年首次将Qt移植到Python上形成PyQt以来,已经发布了PyQt3、PyQt4、PyQt5、PyQt6等4个主要版本,截至本书完稿时的最新版本是PyQt 6.6.0。PyQt6的主要特点如下。

☑跨平台支持:PyQt6可以在Windows、macOS、Linux等操作系统上运行,并且可以创建跨平台的应用程序。

☑紧密集成Qt6框架:PyQt6提供了与Qt6框架紧密集成的Python API,方便开发者使用Python语言进行Qt6开发。

☑支持多种GUI控件:PyQt6支持多种常用的GUI控件,例如按钮、文本框、滑动条、列表框等。

☑支持多种布局方式:PyQt6支持多种布局方式,包括水平布局、垂直布局、网格布局等。

☑支持事件处理机制:PyQt6支持事件处理机制,开发者可以使用信号与槽机制来处理控件的事件。

☑支持多线程编程:PyQt6支持多线程编程,可以创建多个线程来执行耗时的任务,从而提高程序的响应速度。

另外,与PyQt5相比,PyQt6主要有以下变化。

☑基于Qt6框架:PyQt6是基于Qt6框架开发的,相比之下,Qt6框架比Qt5框架更现代化和高效。

☑移除了一些模块:PyQt6移除了一些PyQt5中的模块,例如QtWebEngine、QtWebKit等。

☑改进了一些模块:PyQt6改进了一些PyQt5中的模块,例如QtMultimedia、QtCharts等。

☑引入新的模块:PyQt6引入了一些新的模块,例如Qt3D、QtRemoteObjects等。

☑使用不同类型枚举封装常量:PyQt6将几乎所有的常量值都封装到了相应的枚举中,因此在使用这些值时,可以通过不同的枚举来调用,不用在类中查找。

说明

(1)PyQt6不完全向下兼容PyQt5,而且官方默认只提供对Python 3.x的支持,如果在Python 2.x上使用PyQt6就要自行编译。另外,截至本书完稿日,PyQt6支持的Python版本最高为Python 3.9,其目前并不支持Python 3.10及之后的新版本,因此建议大家使用Python 3.9.x+PyQt6开发GUI程序。

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

多学两招

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

1.2.3 PyQt6与Qt的关系

Qt是一个基于C++的跨平台GUI库,它包括跨平台类库、集成开发工具和跨平台的IDE。

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

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

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

图1.6 Qt发展历程

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

由于目前最新的PyQt版本是6.6.0,所以本书后续统称其为PyQt6。

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

图1.7 PyQt6与Qt的关系

1.2.4 PyQt6的主要模块

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

图1.8 PyQt6模块中的主要类及其作用

图1.9展示了PyQt6中的主要模块及其作用。

图1.9 PyQt6的主要模块及其作用

说明

图1.9中标 的为常用的PyQt6模块。

多学两招

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

(2)PyQt6的官方提供在线的英语帮助,有需要的读者可以自行查看。

1.2.5 其他常用GUI开发库

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

1.2.5.1 Tkinter

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

1.2.5.2 Flexx

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

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

1.2.5.3 wxPython

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

1.2.5.4 Kivy

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

1.2.5.5 PySide

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

1.2.5.6 PyGTK

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

本章e学码:关键知识点拓展阅读

GNOME  PyQt

GUI    XML w0gBnw9Dz6fDXj/gEweziWb37G2PqSu5dk9QLvJX5fJQVV/roPSwExNdywIcMExO

点击中间区域
呼出菜单
上一章
目录
下一章
×