Python Qt GUI与数据可视化编程
作者: 王维波,栗宝鹃,张晓东
出版时间: 2019年版
内容简介
本书介绍在Python中使用PyQt5和其他模块进行GUI和数据可视化编程的方法。第一部分介绍PyQt5设计GUI程序的基本框架,包括GUI应用程序的基本结构、窗体UI可视化设计与窗体业务逻辑的设计、信号与槽的特点和使用等。第二部分介绍GUI程序设计中一些主要功能模块的使用,包括基本界面组件、事件处理、数据库、绘图、多媒体等。第三部分先介绍使用PyQtChart和PyQtDataVisualization进行二维和三维数据可视化设计的方法,再介绍将Matplotlib嵌入PyQt5 GUI应用程序窗口界面中进行数据可视化的编程方法。通过研读本书,读者可以掌握使用PyQt5、PyQtChart、Matplotlib等模块进行GUI应用程序和数据可视化设计的方法。本书适合具有Python编程基础,并想通过Python设计GUI应用程序或在GUI应用程序中实现数据可视化的读者阅读和参考。
目录
目 录
第 一部分 PyQt5开发基础
第 1章 开发环境安装 2
1.1 Python 2
1.1.1 Python 简介 2
1.1.2 Python的下载与安装 2
1.1.3 IDLE的基本使用 3
1.1.4 安装Python包 4
1.2 Qt 5
1.2.1 Qt 简介 5
1.2.2 Qt 的下载与安装 5
1.2.3 Qt的几个工具软件 7
1.2.4 Qt Creator的设置 7
1.3 PyQt5 8
1.3.1 PyQt5简介 8
1.3.2 PyQt5安装 9
1.3.3 在IDLE中开启对PyQt5的代码提示功能 10
第 2章 PyQt5 GUI程序框架 11
2.1 PyQt5 GUI程序的基本框架 11
2.2 使用可视化设计窗体的GUI程序 12
2.2.1 用UI Designer可视化设计窗体 13
2.2.2 将ui文件编译为py文件 16
2.2.3 使用Ui_FormHello类的GUI程序框架 18
2.2.4 界面与逻辑分离的GUI程序框架 19
2.3 信号与槽的使用 23
2.3.1 信号与槽功能概述 23
2.3.2 Qt Creator的使用 23
2.3.3 窗体可视化设计 25
2.3.4 界面组件布局管理 26
2.3.5 组件的信号与内建槽函数的关联 29
2.3.6 PyQt5 GUI项目程序框架 30
2.3.7 为组件的内建信号编写槽函数 35
2.4 自定义信号的使用 39
2.4.1 信号与槽的一些特点和功能 39
2.4.2 自定义信号使用示例 40
2.4.3 使用信号与槽的一些注意事项 43
2.5 资源文件的使用 43
2.5.1 功能概述 43
2.5.2 窗体可视化设计 44
2.5.3 创建和使用资源文件 44
2.5.4 窗体文件和资源文件的编译 45
2.5.5 窗体业务逻辑类的设计 46
2.5.6 为应用程序设置图标 47
2.6 从Qt C++类库到PyQt5 47
2.6.1 帮助信息的查找 47
2.6.2 正确导入模块中的类 49
2.6.3 部分类和接口函数的差异 50
2.6.4 数据类型对应关系 51
2.7 3个单窗体GUI项目模板 52
2.7.1 概述 52
2.7.2 dialogApp项目模板 53
2.7.3 widgetApp项目模板 54
2.7.4 mainWindowApp项目模板 55
2.7.5 使用项目模板和实例源程序 56
2.7.6 在Eric中编辑和运行示例程序 57
第二部分 GUI应用程序设计
第3章 常用界面组件的使用 60
3.1 数据输入输出 60
3.2 QPushButton 62
3.3 QSlider和QProgressBar 64
3.4 日期时间数据 66
3.4.1 日期时间类和界面组件 66
3.4.2 日期时间数据的获取并转换为字符串 67
3.4.3 字符串转换为日期时间 68
3.4.4 QLineEdit的inputMask 68
3.5 定时器QTimer 69
3.6 下拉列表框QComboBox 70
3.6.1 QComboBox功能概述 70
3.6.2 简单的ComboBox操作 71
3.6.3 带用户数据的ComboBox 72
3.6.4 QComboBox常用函数总结 73
3.7 QMainWindow与QAction 73
3.7.1 功能简介 73
3.7.2 窗体可视化设计 75
3.7.3 界面操作功能的代码实现 77
3.8 QListWidget和QToolButton 80
3.8.1 功能概述 80
3.8.2 窗体可视化设计 81
3.8.3 QToolButton与下拉式菜单 84
3.8.4 QListWidget的操作 85
3.8.5 创建右键快捷菜单 88
3.9 QTreeWidget和QDockWidget 88
3.9.1 功能概述 88
3.9.2 窗体可视化设计 90
3.9.3 QTreeWidget操作 91
3.9.4 QLabel和QPixmap显示图片 96
3.9.5 QDockWidget的操作 97
3.10 QTableWidget 98
3.10.1 QTableWidget概述 98
3.10.2 窗体设计与初始化 99
3.10.3 QTableWidget操作 100
3.11 容器类组件与布局设计 105
3.11.1 QGroupBox组件与水平布局 106
3.11.2 布局的layoutStretch属性 106
3.11.3 网格状布局 107
3.11.4 分割条 108
第4章 Model/View结构 109
4.1 Model/View结构 109
4.1.1 Model/View结构基本原理 109
4.1.2 Model(数据模型) 110
4.1.3 View(视图) 111
4.1.4 Delegate(代理) 111
4.1.5 Model/View结构的一些概念 112
4.2 QFileSystemModel 114
4.2.1 QFileSystemModel类的基本功能 114
4.2.2 QFileSystemModel的使用 114
4.3 QStringListModel 116
4.3.1 QStringListModel功能概述 116
4.3.2 QStringListModel的使用 116
4.4 QStandardItemModel 119
4.4.1 功能概述 119
4.4.2 界面设计 120
4.4.3 QStandardItemModel的使用 120
4.5 自定义代理 128
4.5.1 自定义代理的功能 128
4.5.2 自定义代理类的基本设计要求 128
4.5.3 基于QDoubleSpinBox的自定义代理类 129
4.5.4 基于QComboBox的自定义代理类 130
4.5.5 自定义代理类的使用 131
第5章 事件处理 133
5.1 默认事件处理 133
5.1.1 应用程序的事件循环 133
5.1.2 事件类型与默认的事件处理函数 133
5.1.3 事件与信号的关系 137
5.2 事件拦截与事件过滤 139
5.2.1 event()函数的作用 139
5.2.2 事件过滤器 140
5.2.3 事件队列的及时处理 141
5.3 拖放事件与拖放操作 142
5.3.1 拖放操作相关事件 142
5.3.2 外部文件拖放操作示例 143
5.4 具有拖放操作功能的组件 146
5.4.1 功能概述 146
5.4.2 界面设计与初始化 147
5.4.3 拖放操作属性的显示 148
5.4.4 拖放属性的设置 149
5.4.5 通过事件过滤器实现项的删除 150
第6章 对话框与多窗口设计 151
6.1 标准对话框 151
6.1.1 概述 151
6.1.2 QFileDialog对话框 152
6.1.3 QColorDialog对话框 154
6.1.4 QFontDialog对话框 154
6.1.5 QProgressDialog对话框 155
6.1.6 QInputDialog输入对话框 156
6.1.7 QMessageBox消息对话框 157
6.2 自定义对话框及其使用 159
6.2.1 对话框的不同调用方式 159
6.2.2 示例项目的文件组成 160
6.2.3 主窗口的设计与初始化 161
6.2.4 对话框QmyDialogSize的创建和使用 163
6.2.5 对话框QmyDialogHeaders的创建和使用 165
6.2.6 对话框QmyDialogLocate的创建和使用 166
6.3 多窗口应用程序 170
6.3.1 主要的窗体类及其用途 170
6.3.2 窗体类重要特性的设置 170
6.3.3 多窗口应用程序设计示例 172
6.4 MDI应用程序设计 179
6.4.1 MDI简介 179
6.4.2 文档窗体类QmyFormDoc的设计 180
6.4.3 主窗口设计与子窗口的使用 181
第7章 数据库 185
7.1 Qt SQL模块概述 185
7.1.1 Qt SQL支持的数据库 185
7.1.2 SQLite数据库 185
7.1.3 Qt SQL模块的主要类 187
7.2 QSqlTableModel的使用 188
7.2.1 功能概述 188
7.2.2 窗体可视化设计 190
7.2.3 窗体业务逻辑类的设计和初始化 190
7.2.4 打开数据库和数据表 191
7.2.5 添加、插入与删除记录 197
7.2.6 保存与取消修改 198
7.2.7 设置和清除照片 199
7.2.8 数据记录的遍历 199
7.2.9 记录的排序 200
7.2.10 记录的过滤 200
7.3 QSqlQueryModel的使用 201
7.3.1 QSqlQueryModel功能概述 201
7.3.2 窗体业务逻辑类的设计和初始化 202
7.3.3 打开数据库和查询数据 202
7.3.4 记录移动 205
7.4 QSqlQuery的使用 206
7.4.1 QSqlQuery基本用法 206
7.4.2 QSqlQueryModel和QSqlQuery联合使用 207
7.5 QSqlRelationalTableModel的使用 215
7.5.1 关系数据表和示例功能 215
7.5.2 关系数据模型功能实现 216
第8章 绘图 219
8.1 QPainter绘图 219
8.1.1 QPainter绘图系统 219
8.1.2 QPen的主要功能 221
8.1.3 QBrush的主要功能 223
8.1.4 渐变填充 224
8.1.5 QPainter绘制基本图形 227
8.2 坐标系统和坐标变换 230
8.2.1 坐标变换函数 230
8.2.2 坐标变换绘图实例 231
8.2.3 视口和窗口 234
8.2.4 绘图叠加的效果 236
8.3 自定义界面组件 237
8.3.1 功能概述 237
8.3.2 自定义QWidget子类QmyBattery 237
8.3.3 QmyBattery类的使用 239
8.4 Graphics View绘图架构 241
8.4.1 场景、视图与图形项 241
8.4.2 Graphics View的坐标系统 242
8.4.3 Graphics View相关的类 243
8.4.4 Graphics View程序基本结构 246
8.4.5 Graphics View绘图程序示例 250
第9章 文件 261
9.1 文件操作相关类概述 261
9.1.1 文件操作接口类QFile 261
9.1.2 文件流操作类QTextStream和QDataStream 262
9.1.3 目录和文件操作相关的类 262
9.2 文本文件读写 263
9.2.1 功能概述 263
9.2.2 QFile读写文本文件 263
9.2.3 QFile和QTextStream结合读写文本文件 266
9.2.4 Python内建函数读写文本文件 268
9.3 二进制文件读写 269
9.3.1 基础知识和工具软件 269
9.3.2 QDataStream功能概述 271
9.3.3 QDataStream流化数据读写 272
9.3.4 QDataStream原始数据读写 281
9.4 目录和文件操作 288
9.4.1 目录和文件操作相关的类 288
9.4.2 示例功能概述 288
9.4.3 QFile类 290
9.4.4 QFileInfo类 291
9.4.5 QDir类 292
9.4.6 QFileSystemWatcher类 294
第 10章 多媒体 297
10.1 PyQt5多媒体模块功能概述 297
10.2 音频播放 298
10.2.1 使用QMediaPlayer播放音乐文件 298
10.2.2 使用QSoundEffect和QSound播放音效文件 303
10.3 音频输入 304
10.3.1 使用QAudioRecorder录制音频 304
10.3.2 使用QAudioInput获取音频输入 310
10.4 视频播放 317
10.4.1 在QVideoWidget上显示视频 317
10.4.2 在QGraphicsVideoItem上播放视频 321
10.5 摄像头的使用 322
10.5.1 摄像头操作概述 322
10.5.2 示例功能和界面可视化设计 324
10.5.3 使用摄像头拍照 324
10.5.4 使用QMediaRecorder通过摄像头录像 328
第 11章 GUI设计增强技术 329
11.1 多语言界面 329
11.1.1 多语言界面设计概述 329
11.1.2 多语言界面设计示例 331
11.2 QSS定制界面 336
11.2.1 Qt样式表的作用 336
11.2.2 Qt样式表句法 337
11.2.3 Qt样式表的使用 342
第三部分 数据可视化
第 12章 PyQtChart二维绘图 346
12.1 PyQtChart概述 346
12.1.1 模块安装与基本功能 346
12.1.2 一个简单的PyQtChart绘图程序 347
12.1.3 图表的主要组成部分 348
12.2 QChart绘制折线图 350
12.2.1 示例功能概述与界面设计 350
12.2.2 QPen属性设置对话框设计 351
12.2.3 主窗口业务逻辑类初始化 353
12.2.4 图表各组成部件的属性设置 356
12.3 QChart绘图高级功能 365
12.3.1 功能概述 365
12.3.2 自定义类QmyChartView 366
12.3.3 主窗口可视化设计 368
12.3.4 绘图功能的实现 368
12.4 对数坐标轴和多坐标轴 373
12.4.1 功能概述 373
12.4.2 主窗口可视化设计 374
12.4.3 界面和图表初始化 374
12.4.4 载入数据文件并绘制曲线 375
12.5 饼图和各种柱状图 377
12.5.1 功能概述 377
12.5.2 窗口初始化与数据准备 378
12.5.3 其他界面操作功能的实现 381
12.5.4 柱状图 382
12.5.5 堆叠柱状图 387
12.5.6 百分比柱状图 388
12.5.7 饼图 390
12.6 蜡烛图和日期时间坐标轴 392
12.6.1 功能概述 392
12.6.2 界面和图表初始化 394
12.6.3 绘图功能的实现 395
12.7 区域填充图 399
12.7.1 功能概述 399
12.7.2 界面和图表初始化 400
12.7.3 绘图功能的实现 402
12.8 极坐标图 405
12.8.1 功能概述 405
12.8.2 绘制极坐标图 406
12.8.3 其他功能的实现 408
第 13章 PyQtDataVisualization三维绘图 411
13.1 PyQtDataVisualization模块概述 411
13.1.1 模块安装与导入 411
13.1.2 模块中主要的类 411
13.2 三维柱状图 413
13.2.1 功能概述 413
13.2.2 窗体可视化设计 413
13.2.3 初始化创建三维柱状图 414
13.2.4 其他功能的实现 417
13.3 三维散点图 424
13.3.1 功能概述 424
13.3.2 创建三维散点图 425
13.3.3 散点数据管理 427
13.4 三维曲面图 429
13.4.1 功能概述 429
13.4.2 三维曲面图 429
13.4.3 三维地形图 434
第 14章 Matplotlib数据可视化 437
14.1 Matplotlib的基本用法 437
14.1.1 Matplotlib的安装 437
14.1.2 一个脚本化的绘图程序 438
14.1.3 GUI程序中的Matplotlib绘图 439
14.2 图的主要元素的面向对象操作 443
14.2.1 图的主要组成元素 443
14.2.2 示例程序功能和窗体可视化设计 445
14.2.3 界面创建与初始化绘图 446
14.2.4 Figure对象的操作 450
14.2.5 Axes子图的操作 453
14.2.6 曲线设置 456
14.2.7 x轴和y轴设置 458
14.3 交互操作 464
14.3.1 交互功能概述 464
14.3.2 界面构造与初始化绘图 466
14.3.3 界面其他功能的实现 469
14.3.4 交互事件的处理 469
14.4 典型二维图的绘制 471
14.4.1 自定义绘图组件类QmyFigureCanvas 471
14.4.2 QmyFigureCanvas类的使用 473
14.4.3 直方图 475
14.4.4 填充图 476
14.4.5 饼图 477
14.4.6 火柴杆图 478
14.4.7 极坐标图 480
14.5 三维数据绘图 482
14.5.1 三维数据绘图概述 482
14.5.2 窗体初始化 483
14.5.3 绘制三维图 486
14.5.4 三维数据绘制二维图 487
14.5.5 colormap 488