Skip to content

Latest commit

 

History

History
156 lines (88 loc) · 13.5 KB

File metadata and controls

156 lines (88 loc) · 13.5 KB

零、前言

在一个术语应用开发人员几乎总是意味着web 应用开发人员的时代,桌面 GUI 应用的构建似乎有可能成为一门奇特而晦涩的艺术。然而,在每一个讨论编程的论坛、邮件列表和聊天服务中,我发现年轻的 Python 程序员都渴望深入到 GUI 工具包中,这样他们就可以开始构建任何普通人都可以轻易识别为应用的软件。PyQt 是一贯推荐给这些学习者的一个 GUI 库,可以说是 Python 最激动人心、最完整的工具包。

尽管如此受欢迎,但可用于学习 PyQt 的资源相对较少。那些希望学习它的人必须大量依赖过时的书籍、C++文档、分散的博客或在邮件列表或堆栈溢出帖子中发现的代码片段。Python 程序员显然需要一本关于 PyQt 的现代教程和参考资料,本书旨在满足这一需求。

我的第一本书,*PythonGUI 编程与 Tkinter,*重点介绍了使用 Tkinter 进行应用开发的基础,涵盖了接口设计、单元测试、程序体系结构和打包等核心主题。在这本书中,我想超越基础知识,不仅仅是教你如何构建数据驱动的商业窗体(有很多工具包可以制作,还有很多其他书籍可以教你写作),而是探索 PyQt 提供的更令人兴奋和独特的可能性:多媒体、动画、3D 图形、图像处理、网络,多线程等。当然,这本书也没有回避业务方面的问题,它涵盖了数据输入窗体、SQL 数据库和图表。

有两种作者写技术书籍。第一个是绝对的专家,拥有绝对的权威和对当前主题的百科全书式知识,能够利用深刻的理解来做出完美地满足学习者最相关需求的解释。

第二类作者仅仅是一个凡人,对基本知识有着合理的熟悉,愿意研究未知的东西,最重要的是,有着坚定的决心,确保印刷品中的每一句话都是完整和正确的真理。作者必须准备好在写作过程中中途停止,以便在解释器或代码编辑器中测试声明;花数小时阅读文档、邮件列表线程、代码注释和 IRC 日志,以获得更正确的理解;当一个新的事实表明他们原来的假设存在错误时,他们会删除并重写大量的工作。

当我被要求写一本关于 PyQt5 的书时,我不能声称自己是第一类作家(现在也不能);虽然我在工作中和开源世界中开发并维护了几个 PyQt 应用,但我对 PyQt 的理解很少超出我自己代码的简单需求。因此,我渴望成为第二种类型,致力于勤奋的学习和艰苦的过程,筛选和提炼混乱的大量可用信息,形成一个文本,引导有抱负的 GUI 程序员掌握 PyQt。

作为一个有五个孩子的自豪的父亲,其中一些孩子对编程的兴趣正在萌芽(如果不是蓬勃发展的话),我在过去的六个月里写了一本书,如果他们希望学习这些技能,我可以自信而认真地把这本书摆在他们面前。亲爱的读者,我希望你们能在这篇文章中感受到父母对你们成长和进步的热情,因为我们一起解决这个问题。

这本书是给谁的

本书面向希望深入研究 PyQt 应用框架并学习如何制作强大 GUI 应用的中级 Python 程序员。假定读者了解 Python 语法、特性和习惯用法的基础知识,如函数、类和常用标准库工具。还假设读者有一个能够轻松编写和执行 Python 代码的环境。

本书没有假定对 GUI 开发、其他 GUI 工具包或其他版本的 PyQt 有任何先验知识。

这本书涵盖的内容

第 1 章,*PyQt 入门,*向您介绍了 Qt 和 PyQt 库。您将学习如何设置用于编写 PyQt 应用的系统,并向 Qt 设计器进行介绍。您还将编写传统的Hello World应用,并为 PyQt 应用开发一个基本模板。

第 2 章使用 QtWidgets 构建窗体向您展示了制作 PyQt GUI 的基础知识。您将遇到最常见的输入和显示小部件,学习使用布局排列它们,并学习如何验证用户输入。您将在开发日历 GUI 时将这些技能付诸实施。

第三章用信号和插槽处理事件重点介绍 PyQt 的事件处理和对象通信系统。您将学习如何使用此系统使应用响应用户输入,以及如何创建自定义信号和插槽。您将通过完成日历应用来实现这些技能。

第 4 章,*使用 QMainWindow 构建应用,*向您介绍了QMainWindow类,它构成了本书其余部分应用的基础。您还将探索 PyQt 的标准对话类和保存应用配置的QSettings模块。

第 5 章创建与模型视图类的数据接口重点关注 Qt 的模型视图类。您将学习模型视图设计的原则,探索QtWidgets中的模型视图类,并在我们开发 CSV 编辑器时练习您的知识。

第 6 章对 Qt 应用进行样式化探讨了 PyQt 小部件的样式化功能。您将使用自定义字体、图像和图标来增加 GUI 应用的趣味性。您将学习使用样式对象和 Qt 样式表自定义颜色。最后,我们将学习如何制作样式属性的基本动画。

第 7 章使用 Qt 多媒体进行视听处理探索 Qt 的多媒体特性。您将学习如何以跨平台无缝工作的方式播放和录制音频和视频。

第 8 章与 QtNetwork 的联网重点介绍使用QtNetwork库进行的简单网络通信。您将学习通过原始套接字进行通信,包括传输控制协议TCP)和用户数据报协议UDP),以及学习使用 HTTP 发送和接收文件和数据。

第 9 章用 QtSQL探索 SQL,向您介绍 SQL 数据库编程的世界。您将学习 SQL 和 SQLite 数据库的基础知识。然后,您将了解 PyQt 应用如何使用QtSQL库使用原始 SQL 命令或 Qt 的 SQL 模型视图类访问数据。

第 10 章带 QTimer 和 QThread 的多线程处理介绍了多线程和异步编程的世界。您将学习使用计时器延迟事件循环上的任务,并学习如何使用QThread将进程推入单独的执行线程。您还将学习如何使用QThreadPool进行高并发编程。

第 11 章使用 QTextDocument创建富文本,探索 Qt 中的富文本和文档准备。我们将向您介绍 Qt 的富文本标记语言,并学习如何使用QTextDocument以编程方式构建文档。您还将学习如何使用 Qt 的打印库轻松地跨平台打印文档。

第 12 章使用 QPaint创建二维图形,深入挖掘 Qt 中的二维图形。您将学习如何加载和编辑图像以及创建自定义小部件。您还将学习如何使用 Qt 图形系统绘制和设置动画,并创建一个街机风格的游戏。

第 13 章使用 QtOpenGL创建三维图形,介绍如何使用 OpenGL 创建三维图形。您将学习现代 OpenGL 编程的基础知识,以及如何使用 PyQt 小部件显示 OpenGL 图形并与之交互。

第 14 章用 QtCharts嵌入数据图,探索 Qt 内置的绘图功能。您将学习如何创建静态和动画图表,以及如何自定义图表的颜色、字体和样式。

第 15 章PyQt Raspberry Pi重点介绍了 PyQt 在 Raspberry Pi 计算机上的使用。您将学习如何在 Raspbian Linux 上设置 PyQt,以及如何将 PyQt 的功能与 Raspberry Pi 的 GPIO 引脚结合起来,创建与真实电路交互的 GUI 应用。

第 16 章使用 QtWebEngine浏览网页,介绍 PyQt 基于铬的网页浏览器模块。在构建自己的多选项卡 web 浏览器时,您将探索此模块的功能。

第 17 章准备分发软件讨论了准备共享和分发代码的各种方法。我们将研究最佳项目布局,使用setuptools为其他 Python 用户打包源代码,并使用 PyInstaller 构建独立的可执行文件。

附录 A对问题的回答包含对每章末尾问题的回答或建议。

附录 B将 Raspbian 9 升级为 Raspbian 10为在 Raspbian 10 正式发布之前试图阅读本书的读者解释了如何将 Raspberry Pi 设备从 Raspbian 9 升级为 Raspbian 10。

充分利用这本书

读者应精通 Python 语言,尤其是 Python 3。至少在基本意义上,您应该了解如何使用类和面向对象编程。您可能会发现,通过 C++的帮助是有帮助的,因为大多数可用的 QT 文档都是针对该语言的。

您应该有一台运行 Windows、macOS 或 Linux 的计算机,在该计算机上安装了 Python 3.7,并且可以根据需要安装其他软件。您应该有一个您熟悉的代码编辑器和命令行 shell。最后,你应该可以上网。

本书的每一章都包含一个或多个示例应用。虽然这些示例可供下载,但我们鼓励您继续使用,手动创建这些应用,以便在应用组合在一起时看到中间阶段。

每章还包含一系列问题或一个建议项目,以巩固您对该主题的知识,并为该主题的进一步研究选择资源。如果你在解决这些问题和阅读所提供的材料时投入你的心思和创造力,你将从每一章中获得最大的收获。

本书中包含的代码是根据开放源码 MIT 许可证发布的,该许可证允许您在您认为合适的情况下重新使用代码,前提是您保留所包含的版权声明。我们鼓励您使用、修改、改进和重新发布这些程序。

下载示例代码文件

您可以从您的账户www.packt.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packt.com/support并注册,将文件通过电子邮件直接发送给您。

您可以通过以下步骤下载代码文件:

  1. 登录或注册www.packt.com
  2. 选择“支持”选项卡。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。

下载文件后,请确保使用以下最新版本解压或解压缩文件夹:

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 适用于 Linux 的 7-Zip/PeaZip

该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Mastering-GUI-Programming-with-Python/tree/master 。如果代码有更新,它将在现有 GitHub 存储库中更新。

我们的丰富书籍和视频目录中还有其他代码包,请访问**https://github.com/PacktPublishing/** 。看看他们!

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:http://www.packtpub.com/sites/default/files/downloads/9781789612905_ColorImages.pdf

行动中的代码

访问以下链接查看正在运行的代码的视频:http://bit.ly/2M3QVrl

使用的惯例

本书中使用了许多文本约定。

CodeInText:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:“HTML 文档是按层次结构构建的,最外层的标记通常是<html>

代码块设置如下:

<table border=2>
      <thead>
        <tr bgcolor='grey'><th>System</th><th>Graphics</th><th>Sound</th></tr>
      </thead>

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

<table border=2>
      <thead>
        <tr bgcolor='grey'><th>System</th><th>Graphics</th><th>Sound</th></tr>
      </thead>

任何命令行输入或输出的编写方式如下:

$ python game_lobby.py
Font is Totally Nonexistent Font Family XYZ
Actual font used is Bitstream Vera Sans

粗体:表示一个新术语、一个重要单词或您在屏幕上看到的单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个示例:“从管理面板中选择系统信息。”

Warnings or important notes appear like this. Tips and tricks appear like this.

联系

我们欢迎读者的反馈。

一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中注明书名,并发送电子邮件至[email protected]

勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packt.com/submit-errata,选择您的书籍,点击 errata 提交窗体链接,并输入详细信息。

盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过[email protected]与我们联系,并提供该材料的链接。

如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com

评论

请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。

有关 Packt 的更多信息,请访问Packt.com