Python Qt GUI与数据可视化编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-26 12:37:25

点击下载

作者:王维波 栗宝鹃 张晓东

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Python Qt GUI与数据可视化编程

Python Qt GUI与数据可视化编程试读:

前言

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个空格。● 代码段的缩进只用相对缩进。在文中一个代码段内的代码使用相

对缩进,而不是整个程序文件内的缩进。资源与支持

本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。配套资源

本书提供源代码下载。要获得以上配套资源,请在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/ submission即可)。

如果您来自学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。关于异步社区和异步图书“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。异步社区微信服务号第一部分  PyQt5开发基础第1章 开发环境安装第2章 PyQt5 GUI程序框架第1章 开发环境安装

本书介绍如何在Python中使用PyQt5进行图形用户界面(Graphical User Interface,GUI)应用程序开发,使用的编程语言是Python,构建开发环境需要安装的软件有Python 3、Qt 5和PyQt5。

本章介绍各个软件的功能特点、安装和基本使用方法,以及构建本书介绍内容所需的开发环境。本书所有程序都是在64位Windows 7平台上开发的,但由于Python和Qt都是跨平台的,因此所介绍的内容在Linux等平台上也是适用的。1.1 Python1.1.1 Python 简介

Python是由Guido van Rossum在1989年开发,然后在1991年初发布的。Python是一种跨平台的解释型语言,它功能强大,简单易学,具有面向对象编程的功能。Python是完全开源的软件,具有开放的特性,能很方便地将其他语言(尤其是C/C++)的类库封装为Python的模块来使用。

由于Python语言的特点,以及其开源和开放的特性,吸引了编程社区为Python开发了很多实用且功能强大的包(package),例如用于矩阵处理和线性代数计算的NumPy,用于科学计算的SciPy,用于数据分析的Pandas,用于数据可视化的Matplotlib等,这使得Python在科学计算、数据分析、数据可视化、神经网络、人工智能、Web编程等各方面得到了广泛的应用,逐渐成为一种主流的编程语言。1.1.2 Python的下载与安装

Python是一个完全开源的软件,从官网上可以下载最新版本的Python安装文件。Python 3和Python 2是不兼容的,本书就不考虑Python 2了,直接下载最新的发布版本Python 3.7.0。

Python是跨平台的,有Windows、Linux、macOS等各种平台的安装文件。本书的示例程序都是在64位的Windows 7平台上开发的,所以下载64位Windows平台的离线安装文件。Python的安装过程与一般的Windows程序安装过程一样,在一个安装向导里完成安装过程。

安装向导的第一步如图1-1所示。在此窗口里勾选“Add Python 3.7 to PATH”,会自动将安装后的Python的两个文件夹路径添加到Windows系统的环境变量PATH里,这样就可以在Windows的cmd窗口里直接执行Python的一些工具程序,如python.exe、pyuic5.exe等。

在图1-1中点击“Customize installation”进行定制安装,出现的窗口如图1-2所示,在此窗口中勾选所有选项。其中,pip默认是不勾选的,一定要勾选此选项。pip是Python的包管理工具程序,使用pip可以很方便地下载和安装各种第三方的Python包,包括后面用到的PyQt5、PyQtChart等,都需要通过pip安装。图1-1 Python安装向导第一步图1-2 Python安装向导第二步

继续按照向导提示完成安装。这里设置Python安装到“D:\Python37”目录下,这个目录下有Python的主程序文件python.exe和pythonw.exe。

文件夹“D:\Python37\Scripts”下存放的是Python的一些工具软件,如pip.exe和pip3.exe。在安装其他一些第三方模块或工具软件后,可执行文件都安装到此目录下,例如安装PyQt5之后,会在此目录下增加3个可执行文件。

路径“D:\Python37”和“D:\Python37\Scripts”会被安装程序自动添加到Windows系统的PATH环境变量里,这两个目录下的文件就可以在Windows的cmd窗口里直接执行。如果在安装的第一步(图1-1)中没有勾选“Add Python 3.7 to PATH”,那么这两个路径不会自动添加到PATH环境变量里,需要在安装后手动添加。1.1.3 IDLE的基本使用

Python安装后有一个交互式操作环境IDLE,其运行时界面如图1-3所示。在此交互式操作环境里,可以执行Python的各种语句。

在图1-3窗口的“File”菜单下,点击“New File”,可以打开一个文件编辑器,在这个编辑器里可以编写Python程序,然后保存为后缀为“.py”的文件。例如,在图1-4的窗口中简单地输入了两行语句,然后保存为文件hello.py。

点击图1-4文件编辑器的菜单项“Run”→“Run Module”,或直接按快捷键F5执行此程序,在交互式窗口里就会输出运行结果。

IDLE的功能比较简单,不像其他一些Python IDE(如Eric、PyCharm)功能那么强大,但是基本的程序编辑和调试功能是具备的。IDLE对于初学者来说简单易用,编写和调试规模不大的程序是够用的,因此本书就使用IDLE作为Python开发环境。

IDLE的文件编辑器有以下一些常用的快捷键非常有用。● Ctrl+],选中的代码行右缩进一个Tab。● Ctrl+[,选中的代码行左移一个Tab。● Ctrl+S,保存文件。● Alt+3,在选中代码行的最左端添加注释符号“##”。● Alt+4,删除选中代码行最左端的注释符号“##”。● F5,运行编辑器内的程序文件。图1-3 Python自带的IDLE交互式操作环境图1-4 Python程序文件编辑器

因为Python源程序是采用缩进确定代码段的,排版时为减少缩进空格数和缩进层级,本书设置TAB为3个空格(点击IDLE的“Options”→“Configure IDLE”菜单项进行设置),并且在程序中也基本不使用try...except和try...finally等语句块。

IDLE也具有程序调试功能。在文件编辑器中打开需要调试的源程序文件,通过鼠标右键快捷菜单在当前行设置或取消断点。在IDLE交互环境中,点击“Debug”→“Debugger”菜单项,出现如图1-5所示的调试控制窗口。按F5开始运行程序后,就进入调试状态。在调试状态下,使用图1-5窗口上的“Go”“Step”“Over”等按钮进行程序调试。程序调试的方法与一般IDE的程序调试方法类似,这里就不详细介绍了。图1-5 程序调试控制窗口

本书不对Python语言基础做介绍,假定读者已熟悉Python语言编程的基本方法,掌握了Python中类的使用方法。如果读者对Python的基本编程不熟悉,需要找一本专门介绍Python编程基础的书学习后再来学习本书的内容。

除了Python自带的IDLE,还有许多其他用于Python编程的IDE,如PyCharm、Eric等。本书的示例程序都用IDLE编程和调试,如果读者习惯于使用其他的IDE,也可以使用自己习惯的编程环境。因为Python是解释型语言,无须编译,所以无论使用哪个IDE都可以实现Python程序的编写和运行。1.1.4 安装Python包

Python的一大特点就是有大量的包(package)可供使用,而且都是开源的。PyPI(Python Package Index)网站就是Python程序资源的集散地,在这个网站上可以查找、下载、发布Python包。

在Windows的cmd窗口里使用pip3指令可以直接从PyPI网站下载包并安装。例如,SIP是一个用于将C++库转换为Python扩展模块的工具软件,这种扩展模块称为C++库的Python绑定(binding)。要安装SIP只需在Windows的cmd窗口里执行如下的指令:pip3 install sip

这条指令中的pip3就是“D:\Python37\Scripts”目录下的程序pip3.exe;install是指令参数,表示安装,相应地,卸载用uninstall;sip是需要安装的包的名称。

执行这条指令时,pip3会自动链接到PyPI网站上,查找最新版本的SIP,如果找到就自动下载并安装。成功安装后,在“D:\Python37\Lib\site-packages”目录下会出现SIP相关的子目录和文件,该目录下存放的都是安装的Python包。

如果要卸载已安装的SIP,执行下面的指令即可。pip3 uninstall sip

如果直接链接国外的PyPI服务器速度比较慢,可以在pip3指令中指定使用镜像服务器。例如,使用清华的镜像服务器安装SIP的指令是:pip3 install –i https://pypi.tuna.tsinghua.edu.cn/simple sip1.2 Qt1.2.1 Qt 简介

Qt是一个跨平台的应用程序C++开发类库,支持Windows、Linux、macOS等各种桌面平台,也支持iOS、Android等移动平台,还支持各种嵌入式系统,是应用非常广泛的跨平台C++开发类库。

Qt最早是由挪威的Haavard Nord和Eirik Chambe-Eng在1991年开始开发的,在1994年发布,并成立了一家名为Trolltech的公司。Trolltech公司在2008年被诺基亚公司收购,2012年,Qt被Digia公司收购,2014年从Digia公司拆分出来成立了独立的Qt公司,专门进行Qt的开发、维护和商业推广。

Qt的许可类型分为商业许可和开源许可,开源许可的Qt就已经包含非常丰富的功能模块,可用于Qt学习和一般的应用程序开发。1.2.2 Qt 的下载与安装

在Python中使用PyQt5编写程序可以只安装PyQt5,而不必安装Qt的开发环境。但是为了使用Qt的IDE(即Qt Creator)的一些功能如UI窗体可视化设计、Qt类库帮助信息查找、资源文件管理等,安装Qt是有必要的。

从Qt官网可以下载最新版本的Qt软件。Qt分为商业版和社区版,社区版就是具有开源许可协议的免费版本。Qt的版本更新比较快,本书使用的是Qt 5.12.0,这是一个LTS(Long Term Supported)版本。

下载的Windows平台的Qt离线安装文件是一个可执行文件,运行文件就可以开始安装。安装过程与一般的Windows应用程序安装过程一样,按照向导进行操作即可。

在设置安装路径时,选择安装到“D:\Qt\Qt5.12.0”目录下,当然也可以安装在其他路径下。设置为这个路径,是为了在后面需要讲到Qt的路径时使用此绝对路径。

在安装过程中会出现如图 1-6 所示的安装模块选项设置页面,在这个页面里选择需要安装的模块。“Qt 5.12.0”节点下面是Qt的功能模块,包括用于不同编译器和平台的模块,这些模块如下。图1-6 Qt安装模块选项设置● 使用MSVC(Microsoft Visual C++)编译器的模块,包括MSVC

2015 64-bit、MSVC 2017 32-bit和MSVC 2017 64-bit。若要安装

这几个模块,需要在计算机上预先安装相应版本的Microsoft

Visual Studio。本书不是为了研究Qt C++编程,因此无须安装这

些模块。● MinGW 7.3.0 64-bit编译器模块。MinGW(Minimalist GNU for

Windows)是Windows平台上使用的GNU工具集的导入库的集

合。为了使用Qt的IDE Qt Creator,必须安装至少一个编译器,

可以选择安装这个模块。● 用于UWP平台的编译器模块。UWP(Universal Windows

Platform)是Windows 10中的编译模块,有不同CPU和编译器类

型的UWP模块,本书无须安装。● 用于Android平台的编译模块,包括Android x86、Android

ARM64-v8a等,这是用于Android平台开发的编译模块,本书无

须安装。● Sources是Qt C++类库的源程序,本书无须安装。● Qt Charts是二维图表模块,用于绘制柱状图、饼图、曲线图等

常用二维图表。对于Python,有相应的PyQtChart包,在第12章

会介绍其使用。选择安装此模块,便于查看相关类的帮助信息。● Qt Data Visualization是三维数据图表模块,用于数据的三维显

示,如散点的三维空间分布、三维曲面等。对于Python,有相应

的PyQtDataVisualization包,在第13章会介绍其使用。选择安装

此模块,便于查看相关类的帮助信息。● Qt Purchasing、Qt Virtual Keyboard、Qt WebEngine 等其他模块,

这些模块在本书里不会讲到,可以根据自己的需要选择是否安

装。● Qt Script(Deprecated)是脚本模块,这是个已经过时的模块,

无须安装。“Tools”节点下面是一些工具软件,这些软件如下。● Qt Creator 4.8.0是用于Qt程序开发的IDE,在开发PyQt5的程序时

需要使用此软件进行窗体可视化设计、查阅类的帮助信息等,必

须安装(自动)。● Qt Creator 4.8.0 CDB Debugger support for Qt Creator,是用于支

持在Qt Creator中进行程序调试的模块,可以不安装。● MinGW 7.3.0是MinGW 64-bit 编译工具链,需要安装。● Strawberry Perl是一个Perl语言工具,无须安装。1.2.3 Qt的几个工具软件

安装完成后,在Windows“开始”菜单里建立的“Qt 5.12.0”程序组内容如图1-7所示。程序组中的一个主要程序是Qt Creator 4.8.0(Enterprise),它是用于开发Qt程序的IDE,是Qt的主要工具软件。

根据选择安装的编译器模块会建立相应的几个子分组,例如,在图1-7中有两个版本的编译器模块,即MinGW 7.3.0(64-bit)和MSVC 2015(64-bit),每个分组下面都有以下3个工具软件。图1-7 安装后“开始”菜单里的“Qt 5.12.0”程序组● Qt Assistant是一个独立的查看Qt帮助文档的工具软件。在Qt

Creator中也可以方便地查看Qt帮助文档,基本用不着这个软

件。● Qt Designer是一个进行窗体可视化设计的工具软件。Qt Creator

中也有一个内置的窗体可视化设计工具软件(本书称之为UI

Designer),而且UI Designer可以为界面组件的信号生成槽函数

框架,所以在本书中不使用这个独立的Qt Designer,而使用Qt

Creator内置的UI Designer。● Qt Linguist是一个编辑语言资源文件的工具软件,在第11章介绍

开发多语言界面的应用程序时会用到。1.2.4 Qt Creator的设置

本书对使用的Qt Creator做了一些设置:一是将界面语言设置为英语,因为初始的汉语界面中某些词汇翻译得并不恰当,使用英语界面会更准确一些;二是设置文件命名规则,取消默认的全小写命名文件规则。

启动Qt Creator后,点击Qt Creator菜单栏的“Tools”→“Options…”菜单项打开如图1-8所示的选项设置对话框。

界面语言设置:点击对话框左侧Environment分组后,在Interface页面将界面语言设置为English,设置主题为Flat Light。更改语言和主题后需要重新启动Qt Creator才会生效。

文件命名规则设置:在图1-8所示的C++分组的File Naming页,取消“Lower case file names”选项。默认是勾选此项的,即自动命名的文件名采用全小写字母。

在本书里用Qt Creator只需要进行窗体可视化设计、生成槽函数代码框架、查阅Qt帮助文档,而不需要使用Qt Creator编写任何C++程序。Qt Creator的具体使用在下一章详细介绍。图1-8 Qt Creator的选项设置对话框1.3 PyQt51.3.1 PyQt5简介

Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放性,很容易将其他语言(特别是C/C++)的类库封装为Python绑定,而Qt是非常优秀的C++ GUI类库,所以就有了PyQt。

PyQt是Qt C++类库的Python绑定,PyQt5对应于Qt5类库。Qt推出新的版本后,PyQt就会推出跟进的版本,例如针对Qt 5.12.0就有PyQt 5.12。使用PyQt5可以充分利用Qt的应用程序开发框架和功能丰富的类设计GUI程序。PyQt主要有以下一些优点。● PyQt将Qt的跨平台应用框架与Python的跨平台解释语言结合在

了一起。● Qt使用信号与槽(Signals/Slots)机制进行对象之间的通信,它

是类型安全且弱耦合的,易于创建可重用的软件模块。● 使用Qt Creator中的UI Designer或独立的Qt Designer可以可视化

地设计窗体,然后将窗体转换为Python程序,可以大大提高界面

设计的效率。● PyQt将Qt和Python的优点结合到了一起,程序员可以利用Qt丰

富的UI设计功能,但不需要使用复杂的C++语言,而是使用

Python语言编程。

PyQt5是Riverbank公司的产品,分为开源版本和商业版本,开源版本就包含全部的功能。Riverbank公司不仅开发了PyQt5,还开发了PyQtChart、PyQtDataVisualization、PyQt3D、SIP等软件包。可以在Riverbank公司网站上下载这些软件包的源代码,在PyPI网站上也可以找到这些软件包,所以可以使用pip3指令直接安装。1.3.2 PyQt5安装

在PyPI网站上可以找到最新版本的PyQt5,直接用下面的指令安装PyQt5。pip3 install PyQt5

直接连接PyPI服务器可能速度比较慢,可以使用镜像网站安装,例如使用清华大学镜像网站的指令是:pip3 install –i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5

这条指令正确执行后就会安装PyQt5,并且会自动安装依赖的包SIP。SIP是一个将C/C++库转换为Python绑定的工具,SIP本来是为了开发PyQt而开发的,现在也可以用于将任何C/C++库转换为Python绑定。

安装PyQt5之后,在“D:\Python37\Scripts”目录下增加了pylupdate5.exe、pyrcc5.exe和pyuic5.exe这3个用于PyQt5的可执行程序,如图1-9所示。这3个可执行程序的作用分别如下。● pyuic5.exe是用于将Qt Designer(或Qt Creator内置的UI

Designer)可视化设计的界面文件(.ui文件)编译转换为Python

程序文件的工具软件,是使用PyQt5设计GUI程序最常用到的工

具软件。● pyrcc5.exe是用于将Qt Creator里设计的资源文件(.qrc文件)编

译转换为Python程序文件的工具软件,资源文件一般存储了图

标、图片等UI设计资源。● pylupdate5.exe是用于多语言界面设计时编辑语言资源文件的工

具软件。图1-9 安装PyQt5之后的Scripts子目录下的可执行文件

路径“D:\Python37\Scripts”被添加到了Windows的PATH环境变量里,所以这些程序在cmd窗口里可以直接运行。

若想要卸载PyQt5,就执行下面的指令:pip3 uninstall PyQt51.3.3 在IDLE中开启对PyQt5的代码提示功能

在安装了PyQt5之后,可以在IDLE中开启代码提示功能,并且添加PyQt5的所有模块,这样在编写程序时,IDLE就具有一定的代码提示功能。

首先编辑目录“D:\Python37\Lib\idlelib”下的文件config-extensions.def,修改[AutoComplete]部分:[AutoComplete]enable=Truepopupwait= 20

这表示开启自动提示功能,提示开启的延迟时间是20毫秒。

然后再编辑同一目录下的文件autocomplete.py,在文件的import部分导入PyQt5的各个模块:import osimport stringimport sys##添加需要自动提示的模块import PyQt5.QtWidgetsimport PyQt5.QtCoreimport PyQt5.QtGuiimport PyQt5.QtSqlimport PyQt5.QtMultimediaimport PyQt5.QtMultimediaWidgetsimport PyQt5.QtChartimport PyQt5.QtDataVisualization

这样就将 PyQt5 的各个常用模块以及第 12 章和第 13 章要单独安装的PyQtChart和PyQtDataVisualization加入了可提示模块列表。

开启和设置自动提示功能后,在IDLE中使用PyQt5各模块中的类时就会有代码提示功能。但是IDLE的代码提示功能比较弱,不如PyCharm、Eric等专业IDE软件。第2章 PyQt5 GUI程序框架

本章介绍PyQt5编写GUI程序的基本原理和主要技术点,包括GUI应用程序的基本框架、UI Designer可视化设计窗体的方法、窗体文件如何转换为Python文件并使用和Qt的信号与槽技术的使用方法等。掌握了本章的内容,就掌握了PyQt5设计GUI程序的框架性原理,再学习后面的各章内容就基本上是学习各种类的使用方法了。2.1 PyQt5 GUI程序的基本框架

本节先通过一个简单的示例程序介绍PyQt5 GUI应用程序的基本框架。

启动Python自带的编程和交互式环境IDLE,点击“File”→“New File”菜单项,打开一个文件编辑窗口,在此窗口中输入下面的程序,并保存为文件demo2_1Hello.py,此文件保存在随书示例Demo2_1目录下。## demo2_1Hello.py## 使用PyQt5,纯代码化创建一个简单的GUI程序import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsapp = QtWidgets.QApplication(sys.argv) #创建app,用QApplication类widgetHello = QtWidgets.QWidget() #创建窗体,用QWidget类widgetHello.resize(280,150) #设置窗体的宽度和高度widgetHello.setWindowTitle("Demo2_1") #设置窗体的标题文字LabHello = QtWidgets.QLabel(widgetHello) #创建标签,父容器为widgetHelloLabHello.setText("Hello World,PyQt5") #设置标签文字font = QtGui.QFont() #创建字体对象font,用QFont类font.setPointSize(12) #设置字体大小font.setBold(True) #设置为粗体LabHello.setFont(font) #设置为标签LabHello的字体size=LabHello.sizeHint() #获取LabHello的合适大小,返回值是QSize类对象LabHello.setGeometry(70, 60, size.width(), size.height())widgetHello.show() #显示对话框sys.exit(app.exec_()) #应用程序运行

程序输入完成后,在程序编辑器窗口中点击“Run”→“Run Module”菜单项,或直接按快捷键F5就可以运行程序,会出现图2-1所示的窗口。图2-1 文件demo2_1Hello.py运行结果窗口

这是一个典型的GUI应用程序。观察文件demo2_1Hello.py的代码,并结合程序中的注释,可以看出此程序的基本工作原理。(1)首先导入了PyQt5包中的一些模块,包括QtCore,QtGui,QtWidgets,其中每个模块都包含了一些类。(2)用下面的语句创建了一个应用程序。app = QtWidgets.QApplication(sys.argv)

这里用到了QtWidgets模块中的QApplication类。QApplication是管理GUI应用程序的控制流程和设置的类,这里创建的应用程序对象是app。(3)使用QtWidgets模块中的QWidget类创建了窗体对象widgetHello,然后调用QWidget类的resize()函数设置窗体大小,调用setWindowTitle()函数设置窗体标题。(4) 使用QtWidgets模块中的QLabel类创建了一个标签对象LabHello,创建LabHello的语句是:LabHello = QtWidgets.QLabel(widgetHello)

这里将widgetHello作为参数传递给QLabel的构造函数,实际是指定widgetHello作为LabHello的父容器,这样标签LabHello才会显示在窗体widgetHello上。

后面的代码用QLabel的接口函数setText()设置标签的文字,又创建了一个QFont对象用于设置标签的字体,还设置了标签在窗体上的位置和大小。(5)窗体显示和程序运行。

窗体widgetHello和文字标签LabHello创建并设置好各种属性后,就显示窗体并运行应用程序,即程序中的最后两行语句:widgetHello.show()sys.exit(app.exec_())

这里的窗体widgetHello是应用程序的主窗体,应用程序运行后开始消息管理。

这个示例程序演示了使用PyQt5的一些类创建GUI程序的基本过程。首先需要用QApplication类创建一个应用程序实例,然后创建一个窗体(窗体类主要有QWidget、QDialog、QMainWindow),再创建界面组件(例如一个QLabel组件)并在窗体上显示,最后是显示窗体并开始应用程序的消息循环。这个程序虽然功能很简单,只显示了一个带标签的窗口,关闭窗口还需要点击窗口右上角的关闭按钮,但它已经是一个标准的GUI应用程序。提示  从上面的程序中可以看出,PyQt5中的类都是以大写字母Q开头命名的,如QWidget、QApplication、QLabel等,这样的命名规则很容易将PyQt5的类与其他的类或变量区分开来。2.2 使用可视化设计窗体的GUI程序

示例Demo2_1用PyQt5的一些类创建了一个简单的GUI应用程序,窗体及窗体上的标签对象的创建和属性设置都完全由代码完成。显然这种纯代码方式构造UI的方式是比较麻烦的,特别是在窗体上组件比较多、层次比较复杂的时候,纯代码方式构造界面的工作量和难度可想而知。

Qt提供了可视化界面设计工具Qt Designer,以及Qt Creator中内置的UI Designer。可视化地设计UI窗体可以大大提高GUI应用程序开发的工作效率。

本节通过示例Demo2_2演示如何用UI Designer可视化设计UI窗体,然后转换为Python程序,再构建为Python的GUI程序。主要工作步骤如下。(1)在UI Designer中可视化设计窗体。(2)用工具软件pyuic5将窗体文件(.ui文件)转换为Python程序文件。(3)使用转换后的窗体的Python类构建GUI应用程序。2.2.1 用UI Designer可视化设计窗体

在Qt Creator中点击菜单项“File”→“New File or Project...”,在出现的对话框里选择“Qt”分组里的“Qt Designer Form”(如图2-2所示),这将创建一个单纯的窗体文件(.ui文件)。

在图2-2的对话框中点击“Choose...”按钮后,出现如图2-3所示的窗体模板选择界面。窗体模板主要有以下3种。● Dialog模板,基于QDialog类的窗体,具有一般对话框的特性,

如可以模态显示、具有返回值等。● Main Window模板,基于QMainWindow类的窗体,具有主窗口的

特性,窗口上有主菜单栏、工具栏、状态栏等。● Widget模板,基于QWidget类的窗体。QWidget类是所有界面组

件的基类,如QLabel、QPushButton等界面组件都是从QWidget

类继承而来的。QWidget类也是QDialog和QMainWindow的父

类,基于QWidget类创建的窗体可以作为独立的窗口运行,也可

以嵌入到其他界面组件内显示。图2-2 新建窗体对话框图2-3 选择Widget模板

在图2-3的界面上选择Widget模板。点击“Next”按钮后,在出现的对话框里设置文件名为FormHello.ui,文件保存到Demo2_2的目录下,再根据向导提示完成创建即可。创建了窗体后就可以在Qt Creator内置的UI Designer里可视化设计窗体,图2-4是在窗体上放置了标签和按钮,并设置好各种属性后的界面。

图2-4的UI Designer窗口有以下一些功能区域。● 组件面板。窗口左侧是界面设计组件面板,分为多个组,如

Layouts、Buttons、Display Widgets等,界面设计的常用组件都

可以在组件面板里找到。● 中间区域是待设计的窗体。如果要将某个组件放置到窗体上,从

组件面板上拖动一个组件放到窗体上即可。例如,放一个Label

组件和一个PushButton组件到窗体上。● Action编辑器(Action Editor)和Signals Slots编辑器(Signals

Slots Editor),位于待设计窗体下方。Action编辑器用于设计

Action,Signals Slots编辑器用于可视化地进行信号与槽的关

联,后面会介绍其具体使用。● 对象浏览器(Object Inspector)。窗口右上方是对象浏览器,用

树状视图显示窗体上各组件之间的布局和包含关系,视图有两

列,显示每个组件的对象名称(objectName)和类名称。● 属性编辑器(Property Editor)。窗口右下方是属性编辑器,显

示某个选中的组件或窗体的各种属性及其值,可以在属性编辑器

里修改这些属性的值。

主窗口上方有窗体设计模式和布局管理工具栏,最左侧还有一个工具栏,这些功能在后面详细介绍Qt Creator的使用时再具体介绍。

在设计窗体上用鼠标点选一个组件,在属性编辑器里会显示其各种属性,并且可以修改其属性。例如,图2-5是选中窗体上放置的标签组件后属性编辑器的内容。图2-4 在Qt Creator里可视化设计窗体图2-5 界面组件的属性编辑器

图2-5展示的属性编辑器的最上方显示的文字“LabHello: QLabel”表示这个组件是一个QLabel类的组件,objectName是LabHello。属性编辑器的内容分为两列,其中Property列是属性的名称,Value列是属性的值。属性又分为多个组,实际上表示了类的继承关系,例如在图2-5中,可以看出QLabel的继承关系是QObject→QWidget→QFrame→QLabel。

objectName是组件的对象名称,界面上的每个组件都需要一个唯一的对象名称,以便被引用。界面上的组件的命名应该遵循一定的法则,具体使用什么样的命名法则根据个人习惯而定,主要目的是便于区分和记忆,也要便于与普通变量相区分。

设置组件属性的值只需在属性编辑器里进行修改即可,例如设置LabHello的text属性为“Hello, by UI Designer”,只需如图2-5所示那样修改text属性的值即可。

表2-1是所设计的窗体,以及窗体上的标签和按钮的主要属性的设置。表2-1 窗体以及各组件的主要属性设置objectN类名称属性设置备注ameFormHQWidgwindowTitle="Demo2_2"设置窗体的标题栏显elloet示文字btnClosQPushText="关闭"设置按钮的显示文字eButtonLabHellQLabelText="Hello, by UI Designer"设置标签显示文字和oFont.PointSize=12字体Font.bold=True

窗体设计完成后,将这个窗体保存为文件FormHello.ui。提示  一般情况下,保存的.ui文件名与窗体的objectName名称一致,这样通过文件名就可以直接知道窗体的名称。

窗体文件FormHello.ui实际上是一个XML文件,它记录了窗体上各组件的属性以及位置分布。FormHello.ui的XML文件内容不必去深入研究,它是由UI Designer根据可视化设计的窗体自动生成的。使用IDLE的文件编辑器就可以打开FormHello.ui文件,下面是FormHello.ui文件的内容。 FormHello 0 0 283 156 Demo2_2 50 40 189 16 12 75 true Hello, by UI Designer 100 90 75 23 关闭 2.2.2 将ui文件编译为py文件

使用UI Designer设计好窗体并保存为文件FormHello.ui后,要在Python里使用这个窗体,需要使用PyQt5的工具软件pyuic5.exe将这个ui文件编译转换为对应的Python语言程序文件。

pyuic5.exe程序位于Python安装目录的Scripts子目录下,如“D:\Python37\Scripts”,这个路径在安装Python时被自动添加到了系统的PATH环境变量里,所以可以直接执行pyuic5命令。

在Windows的cmd窗口里用cd指令切换到文件FormHello.ui所在的目录,然后用pyuic5指令编译转换为Python文件。例如,假设文件FormHello.ui保存在目录“G:\PyQt5Book\Demo\chap02\demo2_2”下,依次执行下面的指令:cd G:\PyQt5Book\Demo\chap02\demo2_2pyuic5 –o ui_FormHello.py FormHello.ui

其中,pyuic5的作用是将文件FormHello.ui编译后输出为文件ui_FormHello.py。编译输出的文件名可以任意指定,在原来的文件名前面加“ui_”是个人命名习惯,表明ui_FormHello.py 文件是从FormHello.ui文件转换来的。

为了避免重复地在cmd窗口里输入上述指令,可以创建一个文件uic.bat保存到项目Demo2_2的目录下。bat文件是Windows的批处理文件,uic.bat文件的内容只有一条语句,如下:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载