我写的第二本书《Python Qt GUI与数据可视化编程》终于上架销售了。
去年为第一本书《Qt 5.9 C++开发指南》写的介绍文章称其为倾心倾力之作。本书与第一本书是有些关联的,一些内容框架和示例来自于第一本书,但是本书不是简单地将C++的示例改写为Python的示例,在写这本书时发现第一本书中的一些不足,做了很多的改进。我们在写论文或指导学生写论文时都知道一个基本的道理:好的论文总是一遍一遍改出来的。这是我写的第二本书,有了更多的写书经验,在内容和结构上更加完善,力求完美,所以称其为尽善尽美之作。
怎样才能算得上是尽善尽美之作呢?本人在大学里从事教学工作,看多了学生的报告和毕业论文,翻一遍基本上就能看出来哪篇是好的论文,哪篇是差的论文。好的论文结构清晰,内容充实而条理清楚,该具体的地方能详细介绍,该粗略的地方绝不多占篇幅,格式美观,图文并茂,让人看了就能看明白,看着就舒服。而差的论文则相反,论文结构不清,逻辑混乱,缺少真材实料,内容注水严重,格式也差。
本书就是按照我心目中好论文的标准来写的,在章节内容选取、内容顺序安排、示例设计、原理和程序讲解各方面力求完美。总结一下,本书有以下几个特点。
1. 主题明确,内容选择紧扣主题
本书的主题是使用PyQt5进行GUI应用程序设计,以及嵌入到GUI界面的数据可视化编程。这个主题是非常实用的,因为我们经常需要将自己编写的Python程序封装成一个GUI程序,以便进行展示和交互式的操作。而Python自带的tkinter虽然可以做GUI界面,但是功能比较差,Matplotlib是常用的数据可视化工具,但是一般介绍Matplotlib的书只介绍其脚本化的编程方法,将其当做类似于MATLAB中的plot绘图工具在使用。
PyQt5是Qt5 C++类库的Python绑定,使用PyQt5可以在Python中开发专业级的GUI程序。我们已经出版了一本《Qt 5.9 C++开发指南》,对Qt C++类库的使用比较熟悉,所以写这个主题也是合适的。本书围绕这个主题设置章节内容,首先在内容选择上追求完美。
(1)本书没有用一章专门介绍Python编程基础。研究GUI和数据可视化编程的读者应该已有一定的Python编程基础,所以本书没有必要再介绍Python编程基础。
(2)有些功能模块是PyQt5和Python都有的,就只选择在Python中设计GUI应用程序用得上的PyQt5模块。例如,Python虽然有自带的数据库、多媒体、文件读写功能模块,但是功能不如PyQt5的相应模块,或不易与PyQt5的GUI程序的窗口界面结合使用,本书就介绍PyQt5的数据库、多媒体、文件读写功能模块。而Python自带的多线程编程功能已经比较全,且不涉及用户界面,本书就不介绍PyQt5的多线程编程功能。Python有很多功能强大的第三方网络功能模块,也就没有必要介绍PyQt5的网络编程功能了。
(3)在数据可视化部分,本书介绍了PyQtChart和PyQtDataVisualization的使用,这两个包实际上是Qt C++类库的一部分,熟悉Qt C++类库的读者可以很快上手使用。同时又考虑到Matplotlib使用的广泛性,增加了Matplotlib嵌入到GUI界面上实现数据可视化编程的内容。
2. 章节内容安排逻辑清晰
本书的内容分为三大部分,各部分和章节分布如图。
第一部分是PyQt5开发基础,包括第1章和第2章。
第1章介绍Python、Qt、PyQt5的特点和安装方法,在Windows 中建立开发环境。
第2章介绍使用PyQt5开发GUI应用程序的基本框架原理,包括GUI应用程序的基本结构,可视化设计UI窗体时开发GUI程序的流程和框架,信号与槽的使用方法,资源文件的使用等。掌握了第2章的内容就掌握了PyQt5开发GUI应用程序的框架性原理,再根据自己的编程需要选择性地学习第二和第三部分的章节。
第二部分是GUI应用程序设计,从第3章至第11章。
这一部分介绍GUI应用程序设计中常用到的一些功能模块的编程使用方法,包括常用界面组件的使用,Model/View结构,事件处理,对话框和多窗口设计,数据库,绘图,文件读写和操作,多媒体,多语言界面和Qt样式表定制界面等。
第三部分介绍数据可视化设计方法,从第12章至第14章。
PyQtChart和PyQtDataVisualization是Qt C++类库相应模块的Python绑定,分别用于二维图表和三维数据可视化设计,其内容的介绍比较全面。另外由于Matplotlib在Python数据可视化中应用广泛,第14章专门介绍将Matplotlib嵌入到GUI界面中实现交互式数据可视化的设计方法,包括主要的技术点和一些常用二维图和三维图的编程使用方法。
PyQtChart、PyQtDataVisualization与Matplotlib的某些功能是重合的,但两者各有千秋,读者可根据自己的需要和熟悉的内容选择学习和使用。如果读者熟悉Qt C++类库中的二维图表和三维数据可视化模块的使用,就看第12章和第13章;如果读者熟悉Matplotlib的使用,就看第14章。
3. 内容讲解言简意赅,详略得当
技术书籍必须言简意赅,避免废话连篇,同时要结合程序或图表进行必要的讲解。在内容的讲解上要详略得当,该简略的就简略,该深入的就深入,例如:
(1)本书在第2章介绍过窗体UI的可视化设计原理、代码构建界面的原理后,在后续章节中就基本不再介绍窗体的可视化设计过程,更不会拿构建界面的代码来充页数。界面设计尽量采用可视化方法,GUI程序设计的重点应该放在类的各种接口属性和函数的使用上,放在业务逻辑功能的实现上。
(2)对于简单的界面组件的使用,本书不会花太多篇幅来逐一介绍,因为有些组件的常用功能很简单,甚至是显而易见的,例如QLabel,QPushButton等。本书第3章介绍界面组件的使用时,通常是将几个组件放在一个示例里一起介绍,除了简单介绍其常用方法外,还介绍一些高级方法的使用,例如QTreeWidget的节点关联数据的使用方法。
(3)对于某些内容本书又会深入地详细介绍。例如第14章介绍Matplotlib嵌入到GUI界面中的编程方法,本书就介绍的非常详细,而不是像某本书上只是拿一个官方示例跑一下而已。第14章介绍了Matplotlib嵌入到GUI界面中编程的基本原理,还详细介绍了Matplotlib绘图的主要元素的面向对象操作方法、交互式操作方法,还设计了一个自定义绘图组件类QmyFigureCanvas,可直接在界面可视化设计时使用,可直接应用于用户自己的程序设计。
图14-4 示例Demo14_2运行时界面。将Matplotlib的绘图功能嵌入到GUI程序中,并且对图的各个组成元素的面向对象编程操作进行了详细的介绍
4. 以完整示例讲解编程方法,提供两套示例程序
本书延续《Qt 5.9 C++开发指南》一书的风格,以大量完整示例程序为基础讲解编程原理,这些示例分散在各个章节中。本人一贯认为,没有完整示例的编程书籍就是忽悠人的。只有自己做过一遍示例程序,才可以深入地理解和掌握编程中的一些细节问题,讲解也就更加有针对性。学习编程也是一样,只是拿示例程序跑一遍、看一遍是难以完全掌握的,必须自己动手做一遍才能真正学会。
本书提供两套示例程序。一套是具有全部源码的程序,包括Qt项目、UI窗体、Python程序等,其中的Python程序可以直接运行,显示示例运行结果。
另外一套是只有UI窗体的不完整程序,包括Qt项目、UI窗体、Python程序框架,其中的Python程序文件只有基本框架,没有功能实现代码。这套程序是为了便于读者使用已经设计好的UI窗体,根据书中介绍的过程和内容,在Python程序框架里自己编写程序,逐步实现功能。这样的学习过程就具有可操作性。
以下是本书中一些示例的运行界面。
图3-10 示例Demo3_7运行时界面。使用QAction设计主窗口的菜单栏、工具栏,可视化与代码结合的界面设计方法,QPlainTextEditor文字编辑功能等
图13-11 示例Demo13_3绘制的三维曲面图。使用PyQtDataVisualization中的类绘制三维曲面图
图14-9 示例Demo14_3运行时界面。Matplotlib绘图工具栏的改造与交互式操作
后记
我们写这本书只是因为发现市面上没有这个主题的好书,觉得有必要写一本。写这本书没有什么项目支持,没有deadline要求,因而能精耕细作,仔细打磨,希望写出一本比较完美的书。现在书已正式出版,算不算得上一本好书,就留给读者和市场,还有时间来检验了。
附:三位作者简介
- 王维波(博主),博士,中国石油大学(华东)教师,从事测控技术与仪器专业相关的教学工作,主要研究地球物理探测仪器开发、监测数据处理方法和软件开发。精通软硬件开发,已出版《Qt 5.9 C++开发指南》一书。
- 栗宝鹃,博士,某大型单位科研人员,主要从事地球物理、水下探测、遥感等专业方向的数据处理和图像识别方面的研究工作,在日常工作中使用Qt和Python解决实际问题。
- 张晓东,博士,中国石油大学(华东)教师,从事自动化专业相关的教学工作,研究方向主要是优化算法、最优控制和智能控制。具有丰富的算法编程经验,善于通过Qt C++和Python结合提高算法效率。