Python Qt GUI与数据可视化编程
上QQ阅读APP看书,第一时间看更新

前言

Python作为一个开源的解释型编程软件,在教学、科研、实际项目中用得越来越多。Python易学易用,程序资源丰富,在编程解决一些科学计算问题时比较实用,但是Python自带的Tkinter包设计GUI程序的功能比较弱,无法设计专业的GUI应用程序。

Qt C++类库是一套广泛使用的跨平台GUI设计类库,PyQt5是Qt5 C++类库的Python绑定,使用PyQt5在Python里编程,可以将Python丰富的科学计算、图形显示等功能与PyQt5的GUI设计功能结合起来,开发出比较专业的Python GUI应用程序,便于对研究成果进行有效的集成与展示。

目前,介绍Python编程的书很多,但是专门介绍PyQt5 GUI编程的书很少。本书介绍两个主题:一个是使用PyQt5进行GUI应用程序设计,另一个是使用PyQtChart、PyQtDataVisualization和Matplotlib在GUI程序的窗口界面上嵌入数据可视化功能。这两个主题都是非常实用的,可以将研究成果集成为一个GUI应用程序,进行交互式操作和结果展示。

本书内容

本书介绍在Python中使用PyQt5、PyQtChart、Matplotlib等进行GUI应用程序设计和数据可视化编程的方法,全书的内容分为三部分。

第一部分是PyQt5开发基础,包括第1章和第2章。

第1章介绍Python、Qt、PyQt5的特点和安装方法,在Windows中建立开发环境。

第2章介绍使用PyQt5开发GUI应用程序的基本框架原理,包括GUI应用程序的基本结构、使用可视化设计UI窗体时开发GUI程序的流程和框架、信号与槽的使用方法等。掌握了第2章的内容就掌握了PyQt5开发GUI应用程序的框架性原理,再学习第二部分和第三部分就很容易了。

第二部分是GUI应用程序设计,从第3章至第11章。

这部分介绍GUI应用程序设计中常用的一些功能模块的编程使用方法,包括常用界面组件的使用、Model/View结构、事件处理、对话框和多窗口设计、数据库、绘图、文件读写和操作、多媒体、多语言界面和Qt样式表定制界面等。

这部分的内容根据PyQt5和Python各自的特点做了取舍,总体的原则就是对GUI程序设计中必需的,而Python中没有或功能不强的模块进行介绍。例如,Python虽然有自带的数据库、多媒体、文件读写功能模块,但是功能不如PyQt5的相应模块,或不易与PyQt5的GUI程序的窗口界面结合使用,因此本书就介绍PyQt5的数据库、多媒体、文件读写功能模块。而Python自带的多线程编程功能已经比较全,且不涉及用户界面,因此本书就不介绍PyQt5的多线程编程功能。Python有很多功能强大的第三方网络功能模块,因此没有必要介绍PyQt5的网络编程功能。

第三部分是数据可视化编程,从第12章至第14章。

Chart和Data Visualization模块是Qt C++类库的一部分,分别用于二维图表绘制和三维数据可视化,但是PyQt5中没有这两个模块,需要单独安装PyQtChart包和PyQtDataVisualization包。第12章介绍使用PyQtChart模块绘制各种二维图表的编程方法,第13章介绍使用PyQtDataVisualization模块绘制三维柱状图、三维散点图和三维曲面图的编程方法。

Matplotlib是Python中应用最广泛的数据可视化模块,但是一般介绍Matplotlib数据可视化的书很少详细介绍将Matplotlib嵌入GUI窗口上的编程方法。第14章专门介绍Matplotlib与PyQt5结合,嵌入GUI程序中实现数据可视化的编程方法,这是在编写集成化的Python GUI应用程序时经常遇到的,是非常实用的功能。

本书学习路线

本书使用的编程语言是Python,但是本书并不会介绍Python语言基础,需要读者对Python编程有一定的了解,特别是对Python的面向对象编程原理要比较熟悉。如果读者对Python不够熟悉,需要参考专门介绍Python编程基础的书,学会Python后再来学习本书。

本书的内容虽然用到Qt的IDE,即Qt Creator,但是并不需要编写任何C++语言程序,所以读者无须具有C++语言基础。当然,如果读者有C++语言基础,或者对Qt C++编程比较熟悉,对阅读本书的内容是非常有帮助的。

学习本书应从第一部分开始。第1章介绍本书用到的各个软件及其安装,搭建开发环境。第2章是本书的基础和重点内容,介绍了PyQt5 GUI应用程序的基本代码框架、基于UI窗体可视化设计的GUI应用程序的设计流程和工具软件pyuic5的使用、UI与窗体业务逻辑分离设计的原理、Qt的核心技术信号与槽的使用方法、Qt Creator中管理和使用资源文件,以及通过工具软件pyrcc5将资源文件转换为Python程序的方法。第2章还创建了3个单窗口项目模板,本书的大部分示例都是基于这几个项目模板创建的。

掌握了第2章的内容就掌握了用PyQt5设计GUI程序的技术框架,剩下的就是PyQt5中用于GUI应用程序设计的各种类的使用了。

第二部分介绍PyQt5 GUI程序设计中各个技术模块的使用方法,包括常用界面组件、Model/View结构、事件处理、对话框与多窗口设计、数据库、绘图、文件、多媒体等,读者可以根据自己的需要学习或查阅相应章节。第11章有两个新的技术点不在第2章介绍的技术框架内,分别是多语言界面设计方法和Qt样式表定制界面方法。

第三部分介绍数据可视化设计方法。PyQtChart和PyQtDataVisualization是Qt C++类库相应模块的Python绑定,分别用于二维图表和三维数据可视化设计,其内容的介绍比较全面。另外由于Matplotlib在Python数据可视化中应用广泛,第14章专门介绍将Matplotlib嵌入GUI窗体上实现交互式数据可视化的设计方法,包括主要的技术点和一些常用二维图和三维图的编程使用方法。

PyQtChart、PyQtDataVisualization与Matplotlib的某些功能是重合的,但它们各有千秋,读者可根据自己的需要和熟悉的内容选择学习和使用。如果读者熟悉Qt C++类库中的二维图表和三维数据可视化模块的使用,就参阅第12章和第13章;如果读者熟悉Matplotlib的使用,就参阅第14章。

示例源程序

本书的示例程序都是在64位Windows 7系统里开发和测试的。在开始编写本书时使用的是Qt 5.11和PyQt 5.11,完成本书初稿时已经发布了Qt 5.12和PyQt 5.12,由于Qt 5.12是一个LTS(Long Term Supported)版本,于是又用Qt 5.12和PyQt 5.12对全书内容和程序进行了检查、修改和测试。

本书使用的各个软件或Python包的版本分别是Python 3.7.0、Qt 5.12.0、PyQt 5.12、PyQtChart 5.12、PyQtDataVisualization 5.12、Matplotlib 3.0.0。

读者在拿到本书进行阅读和学习时,这些软件肯定已经有更新的发布版本了。读者在构建开发环境时使用最新的软件版本即可,不必与本书使用的软件版本完全一致,因为这些软件在大的版本序列里基本上是向下兼容的。

本书提供所有示例源程序的下载,读者可以到人民邮电出版社异步社区搜索到本书后,根据提示下载本书的示例程序资源。本书提供两套示例源程序,使用目的不同。

一套是具有全部源码的程序,包括Qt项目、UI窗体、Python程序等,其中的Python主程序可以直接运行,显示示例运行结果。读者可以使用这套源程序测试和查看示例运行结果,并查看已设计好的UI窗体和Python程序文件。

另外一套是只有UI窗体的不完整程序,包括Qt项目、UI窗体、Python程序框架,其中的Python程序文件只有基本框架,没有功能实现代码。这套程序是为了便于读者使用已经设计好的UI窗体,根据书上介绍的内容和过程,在Python程序框架里自己编写程序,逐步实现功能。之所以保留UI窗体,是因为UI窗体的可视化设计是个比较耗时间的过程,读者如果自己从头开始设计UI窗体,难以保证所有组件的名称和属性与示例的一致,在Python编程实现业务功能时容易出现问题。

作者一贯认为UI窗体的可视化设计不是学习编程的重点,窗体界面的创建能用可视化设计解决的就不要用代码。一般情况下,做过几个示例后很快就可以掌握UI窗体可视化设计的方法,所以,学习编程的重点是各种界面组件和功能类的接口函数、信号的灵活使用,以实现程序的业务逻辑功能。

本书约定

本书编写和运行Python程序使用Python 3.7自带的软件IDLE,对于Python程序有如下的约定。

· Tab缩进使用3个空格。因为Python源程序是采用缩进确定代码段的,排版时为减少缩进空格数,本书设置Tab为3个空格。

· 代码段的缩进只用相对缩进。在文中一个代码段内的代码使用相对缩进,而不是整个程序文件内的缩进。