PySide 6/PyQt 6快速开发与实战
  • 推荐0
  • 收藏0
  • 浏览1.2K

PySide 6/PyQt 6快速开发与实战

  • 书  号:
  • 页  数:
  • 开  本:
  • 出版状态:上市销售
  • 维护人:黄爱萍
本书共9章,内容包含PySide 6/PyQt 6的常用知识及一些经典应用。每章的侧重点不同,且相对独立,读者根据目录即可获取自己所需的内容。第1章介绍PySide/PyQt的入门知识,第2章介绍Qt Designer的详细用法,第3章和第4章介绍PySide/PyQt的基本窗口控件的使用方法,第5章介绍PySide/PyQt的特殊控件——表格与树,第6章介绍一些高级窗口控件,第7章介绍信号/槽和事件,第8章介绍Python的扩展应用,第9章介绍PySide/PyQt的实战应用。
本书旨在帮助读者以最短的时间掌握PySide 6/PyQt 6的基础知识并且能够实战应用,希望本书对有Python程序开发需求的读者有所帮助。
从基础概念到完整项目开发,帮助零基础读者快速掌握PySide 6/PyQt 6编程开发
孙洋洋,目前就职于某国营保险公司,负责公司量化投研系统的开发、维护及策略研发。熟悉多种编程语言,擅长量化投资与GUI程序开发、网络爬虫、机器学习技术,在金融量化领域有多年工作经验。
王硕,目前从事与Python、Go和Java相关的工作,热爱并长期专注于前端开发,以及对大数据和高性能计算技术的研究,积累了大量的一线开发经验,同时具有丰富的工业级系统开发和运维实战经验。
Python是应用最广泛、最简单的编程语言之一,Qt是最好的桌面程序开发库之一。PyQt是Python与Qt结合的产物。PyQt借助Qt和Python两大生态,一诞生就广受欢迎,可以说是Python中应用最广泛的桌面程序开发(GUI)库。由于PyQt是Python与Qt的结合,因此它既可以利用Python强大而又简洁的语法和强大的生态,又不会丢失Qt强大的功能。
事实上,PyQt是第三方提供的Qt for Python绑定,而Qt官方提供的Python绑定为PySide。PySide的第一个版本在2018年发布,是基于Qt 5.11的PySide 2。PyQt最早的版本可以追溯到1998年的PyQt 0.1,当前最新版本为PyQt 6(截至2022年8月,最新版本基于Qt 6.3),并且实现了PyQt与Qt的同步更新。随着PySide 2的逐渐完善,我们有了除PyQt之外的另一个选择,在此之前基本上只会选择PyQt。PySide和PyQt都是Qt对Python的绑定,两者绝大部分的方法和用法都一样,并且两者之间的代码相互转换也非常容易,对于初学者来说随便选取一种学习即可。学习PySide 6/PyQt 6的好处是原来PySide 2/PyQt 5的绝大部分案例都能用,少部分代码在进行微调以后就能运行。因此,对于想要学习GUI的读者来说,从PySide 6/PyQt 6开始是最好的选择。
本书既可以说是《PyQt 5快速入门与实战》的第2版,也可以说是一本新书。与《PyQt 5快速入门与实战》相比,本书增加了很多新的知识点,包含了初学者学习PySide 6/PyQt 6需要掌握的绝大多数内容。
在开始撰写本书时,PySide生态已经非常完善,PySide 6比PyQt 6的更新速度更快。本书提供了PySide 6和PyQt 6两套源代码,所以本书命名为《PySide 6/PyQt 6快速开发与实战》。读者可以把本书作为PySide 6/PyQt 6的小百科,因为本书涉及PySide 6/PyQt 6绝大多数常用的知识点,并且内容足够丰富。如果读者想快速入门PySide/PyQt,那么本书绝对可以满足你的需求。
经过一年多的不懈努力,本书终于得以出版,希望能够帮助更多的朋友快速掌握PySide 6/PyQt 6开发技术,少走弯路,节约时间成本。在笔者最初接触PyQt的时候,查找各种资料非常痛苦,因此让更多的人减轻这种痛苦是笔者完成本书最大的动力。本书若能帮助更多的读者快速入门PySide 6/PyQt 6,将是笔者莫大的荣幸。
本书结构
本书共9章,包含PySide 6/PyQt 6常用知识及一些经典的应用。每章的侧重点不同,并且相对独立,读者根据目录即可获取自己所需的内容。
第1章介绍PySide/PyQt的入门知识,主要介绍PySide和PyQt的基本概念、PySide 6/PyQt 6的安装和使用(包括Qt Designer等工具的初步用法)、常见IDE(PyCharm、VSCode、Eric 7)的安装、配置与使用。已经有一定基础的读者可以略过本章。
第2章介绍Qt Designer的详细用法。Qt Designer是PySide/PyQt的可视化界面编辑程序,通过拖曳鼠标等可视化操作就可以快速开发出GUI文件(*.ui文件),可以通过官方提供的uic工具把.ui文件自动转换为.py文件。本章介绍了PySide/PyQt程序开发流程,如布局管理、信号与槽关联、菜单栏与工具栏、添加与转换资源文件等。对于PySide/PyQt初学者来说,这些是实现快速入门和快速进步的重要内容。
第3章和第4章介绍PySide/PyQt的基本窗口控件的使用方法。第1章介绍了PySide/PyQt的环境配置,第2章介绍了PySide/PyQt完整的开发流程,接下来读者最想知道的是PySide/PyQt有哪些常用控件和如何使用这些控件,这就是第3章和第4章要解决的问题。
第5章介绍PySide/PyQt的特殊控件——表格与树。本章主要介绍表格与树的用法,入门非常简单。如果想要更进一步,还需要理解Model/View/Delegate(模型/视图/委托)框架,这也是表格与树的特殊之处。此外,数据量较大的表格往往需要数据库的支撑,所以本章会涉及数据库的相关内容。
第6章介绍一些高级窗口控件。本章主要介绍第3~5章没有涉及的其他常用控件或内容,这也是介绍控件的最后一章。本章介绍的控件相对高级一些,比较常用的是布局管理与多窗口控件(容器)。本章还介绍了窗口风格、多线程、网页交互、QSS的UI美化等内容,最后以Qt Quick(QML)收尾。
第7章介绍信号/槽和事件。本章对PySide/PyQt的高级内容进行收尾,是介绍PySide/PyQt框架的最后一部分内容。前面几章初步介绍了信号/槽的使用方法,但不够详细,本章会对信号/槽和事件进行系统性的介绍,如内置信号/槽、自定义信号/槽、装饰器信号/槽、信号/槽的断开与连接、多线程信号/槽、事件处理的常用方法等。
第8章介绍Python的扩展应用。第1~7章介绍的是PySide/PyQt框架的内容,本章介绍Python对PySide/PyQt的扩展。学习PySide/PyQt的一大好处是可以结合Python生态提高开发效率。Python生态非常多,本章只介绍部分常用生态,如PyInstaller、Pandas、Matplotlib、PyQtGraph和Plotly等,使用这些生态可以更快地开发出GUI程序。
第9章介绍PySide/PyQt的实战应用。本章介绍了两个应用供读者参考,一个是在量化投资中的应用,另一个是在券商投研中的应用。
此外,本书的附录内容也很重要。
附录A介绍PySide/PyQt各个版本之间相互转换的问题,主要包括以下两部分内容。
 PySide 6/PyQt 6之间的相互转换。
 将PySide 2/PyQt 5转换为PySide 6/PyQt 6。
附录B通过一个案例来分析如何把Qt的C++代码转换为PySide/PyQt的Python代码。Qt的生态比PySide/PyQt更丰富一些,有时需要把Qt的demo转换成PySide/PyQt的demo,读者可以参考这部分内容。
附录C列举一些常用表格目录。本书将很多枚举、属性和函数参数等的用法以表格的形式呈现,绝大部分表格可以根据目录快速定位到,比较常用但又没有办法快速定位到的在这里以表格形式列出。
附录D列举一些笔者了解的基于PySide/PyQt的优秀开源项目。本书只会对这些项目进行简单介绍,感兴趣的读者可自行研究。
本书源代码和附赠内容
本书提供了PySide 6和PyQt 6两套源代码,这两套源代码在Gitee或GitHub官网上都可以查到(打开Gitee或GitHub官网,搜索关键字sunshe35/PyQt6-codes或sunshe35/PySide6-codes)。源代码在Gitee和GitHub官网上会同步更新,国内用户访问Gitee官网的速度会更快一些。若读者运行本书代码存在困难,可参考源代码readme.md文件中的运行环境部分。
此外,本书剥离出部分章节的内容,以附赠电子版的形式呈现。附赠电子版与源代码放在一起,路径名称为“appendix/《PySide 6-PyQt 6快速开发与实战》附赠电子版.pdf”,也可以扫描封底二维码索取。
本书读者
本书适合具有一定Python基础并且对Python桌面程序开发感兴趣的读者阅读。只要读者掌握了Python的基本语法就可以阅读本书,同时在学习PySide 6/PyQt 6的过程中又可以加深与巩固Python基础知识。本书结构合理,内容充实,适合对Python、Qt和PySide/PyQt编程感兴趣的科教人员和广大计算机编程爱好者阅读,也可以作为相关机构的培训教材。
为了方便读者交流,笔者为本书建立了QQ群(群号:588695379),欢迎读者入群交流。祝广大读者学习顺利、事业有成。
致谢
本书得以出版要特别感谢电子工业出版社的黄爱萍,她在选题策划和稿件整理方面为笔者提供了很多建议。感谢生活与工作中的朋友与同事的理解和支持。祝愿每个朋友、同事及读者身体健康、心想事成、财源广进。


孙洋洋
2022年10月1日

目录

第1章 认识PySide 6/PyQt 6 1
1.1 PySide 6/PyQt 6框架简介 1
1.1.1 从GUI到PySide/PyQt 1
1.1.2 PySide 6/PyQt 6的进展 3
1.1.3 PySide/PyQt相对于Qt的优势 4
1.1.4 PySide 6/PyQt 6与PySide 2/PyQt 5的关系 5
1.1.5 PyQt 5与PyQt 4 6
1.1.6 其他图形界面开发库 7
1.2 搭建PySide 6/PyQt 6环境 7
1.2.1 在Windows下使用PySide 6/PyQt 6环境 8
1.2.2 在Windows下自行搭建PySide 6/PyQt 6环境 8
1.2.3 在macOS和Linux下搭建PySide 6/PyQt 6环境 14
1.2.4 测试PySide 6/PyQt 6环境 16
1.3 PySide 6快捷工具简介 16
1.3.1 Qt Designer 17
1.3.2 Qt用户交互编译器 18
1.3.3 Qt资源编译器 18
1.3.4 Qt帮助文档 19
1.3.5 Qt翻译器与其他 19
1.3.6 PyQt 6中的Qt工具 20
1.4 常用IDE的安装配置与使用 21
1.4.1 Eric 7的安装 21
1.4.2 Eric 7的相关配置 23
1.4.3 Eric 7的基本使用 24
1.4.4 PyCharm的安装 28
1.4.5 使用PyCharm搭建PySide 6/PyQt 6环境 30
1.4.6 PyCharm的基本使用 32
1.4.7 VSCode的安装 35
1.4.8 VSCode的配置 36
1.4.9 VSCode的基本使用 37
1.5 PySide/PyQt的启动方式 40
第2章 Qt Designer的使用 43
2.1 Qt Designer快速入门 43
2.1.1 新建主窗口 44
2.1.2 窗口主要区域介绍 45
2.1.3 查看.ui文件 47
2.1.4 将.ui文件转换为.py文件 49
2.1.5 将.qrc文件转换为.py文件 54
2.1.6 界面与逻辑分离 54
2.2 布局管理入门 55
2.2.1 使用布局管理器进行布局 56
2.2.2 使用容器控件进行布局 59
2.3 Qt Designer实战应用 60
2.3.1 绝对布局 61
2.3.2 使用布局管理器进行布局 63
2.3.3 其他流程补充 70
2.3.4 测试程序 73
2.4 信号与槽关联 75
2.4.1 简单入门 75
2.4.2 获取信号与槽 80
2.4.3 使用信号/槽机制 85
2.5 菜单栏与工具栏 85
2.5.1 界面设计 85
2.5.2 效果测试 90
2.6 添加图片(资源文件) 92
2.6.1 创建资源文件 92
2.6.2 添加资源文件 93
2.6.3 转换资源文件 96
2.6.4 效果测试 97
第3章 基本窗口控件(上) 100
3.1 主窗口(QMainWindow/QWidget/QDialog) 100
3.1.1 窗口类型 100
3.1.2 创建主窗口 102
案例3-1 创建主窗口 103
3.1.3 移动主窗口 106
3.1.4 添加图标 106
3.1.5 显示状态栏 107
3.1.6 窗口坐标系统 107
3.2 标签(QLabel) 110
案例3-2 QLabel标签的基本用法 111
3.2.1 对齐 112
3.2.2 设置颜色 112
3.2.3 显示HTML信息 112
3.2.4 滑动与单击事件 112
3.2.5 加载图片和气泡提示QToolTip 113
3.2.6 使用快捷键 114
案例3-3 QLabel快捷键的基本用法 114
3.3 单行文本框(QLineEdit) 115
案例3-4 QLineEdit的基本用法 116
3.3.1 对齐、tooltip和颜色设置 117
3.3.2 占位提示符、限制输入长度、限制编辑 117
3.3.3 移动指针 118
3.3.4 编辑 119
3.3.5 相关信号与槽 119
3.3.6 快捷键 120
3.3.7 隐私保护:回显模式 121
案例3-5 回显模式的显示效果 121
3.3.8 限制输入:验证器 123
案例3-6 QValidator验证器的使用方法 123
3.3.9 限制输入:掩码 124
案例3-7 输入掩码InputMask 125
3.4 多行文本框(QTextEdit/QPlainTextEdit) 126
3.4.1 QTextEdit 126
案例3-8 QTextEdit控件的使用方法 127
3.4.2 QPlainTextEdit 129
案例3-9 QPlainTextEdit控件的使用方法 129
3.4.3 快捷键 130
3.4.4 QSyntaxHighlighter 132
案例3-10 QSyntaxHighlighter控件的使用方法 132
3.4.5 QTextBrowser 133
案例3-11 QTextBrowser控件的使用方法 134
3.5 按钮类控件 137
3.5.1 QAbstractButton 137
3.5.2 QPushButton 138
案例3-12 QPushButton按钮的使用方法 139
3.5.3 QRadioButton、QGroupBox和QButtonGroup 141
案例3-13 QRadioButton按钮的使用方法 142
3.5.4 QCheckBox 144
案例3-14 QCheckBox按钮的使用方法 145
3.5.5 QCommandLinkButton 148
案例3-15 QCommandLinkButton按钮的使用方法 148
3.6 工具按钮(QToolButton) 150
案例3-16 QToolButton按钮的使用方法 150
3.7 下拉列表框(QComboBox) 156
案例3-17 QComboBox按钮的使用方法 157
3.7.1 查询 158
3.7.2 增加 159
3.7.3 修改 159
3.7.4 删除 161
3.7.5 信号与槽函数 161
3.7.6 模型/视图框架 163
3.7.7 QFontComboBox 163
案例3-18 QFontComboBox按钮的使用方法 165
3.8 微调框(QSpinBox/QDoubleSpinBox) 167
案例3-19 QSpinBox控件的使用方法 168
3.8.1 步长和范围 169
3.8.2 循环 169
3.8.3 前缀、后缀与千位分隔符 169
3.8.4 特殊选择 170
3.8.5 信号与槽 170
3.8.6 自定义显示格式 171
案例3-20 QSpinBox控件的自定义格式显示 171
案例3-21 QDoubleSpinBox控件的使用方法 172
3.9 日期时间控件 173
3.9.1 日期时间相关控件 173
3.9.2 QDateTimeEdit、QDateEdit和QTimeEdit 174
案例3-22 QDateTimeEdit控件的使用方法 174
3.9.3 QCalendarWidget 181
案例3-23 QCalendarWidget控件的使用方法 183
3.10 滑动控件 184
3.10.1 QAbstractSlider 185
3.10.2 QSlider 186
案例3-24 QSlider控件的使用方法 187
3.10.3 QDial 188
案例3-25 QDial控件的使用方法 189
3.10.4 QScrollBar 190
案例3-26 QScrollBar控件的使用方法 191
3.11 区域滚动(QScrollArea) 193
案例3-27 QScrollArea控件的使用方法 194
第4章 基本窗口控件(下) 197
4.1 对话框类控件(QDialog族) 197
4.1.1 对话框简介 198
4.1.2 模式对话框 198
4.1.3 非模式对话框 199
案例4-1 QDialog控件的基本用法 199
4.1.4 扩展对话框 204
案例4-2 QDialog扩展对话框的使用方法 204
4.1.5 QMessageBox 206
案例4-3 QMessageBox控件的使用方法 207
4.1.6 QInputDialog 212
案例4-4 QInputDialog控件的使用方法 213
4.1.7 QFontDialog 215
案例4-5 QFontDialog控件的使用方法 215
4.1.8 QFileDialog 217
案例4-6 QFileDialog控件的使用方法 217
4.1.9 QColorDialog 222
案例4-7 QColorDialog控件的使用方法 223
4.1.10 QProgressDialog和QProgressBar 225
案例4-8 QProgressDialog控件和QProgressBar控件的使用方法 226
4.1.11 QDialogButtonBox 231
案例4-9 QDialogButtonBox控件的使用方法 233
4.2 窗口绘图类控件 236
4.2.1 QPainter 236
案例4-10 QPainter的简单用法 239
4.2.2 QBrush 241
案例4-11 QBrush的使用方法 244
4.2.3 QPen 246
案例4-12 QPen的使用方法 248
4.2.4 几个绘图案例 250
案例4-13 综合使用QPainter、QBrush和QPen的方法 251
案例4-14 QPainter的使用方法 251
案例4-15 QPainter实时绘图 253
案例4-16 绘制同心圆 254
4.2.5 QPixmap 255
4.2.6 QImage 257
案例4-17 QPixmap控件和QImage控件的使用方法 263
4.3 拖曳与剪贴板 266
4.3.1 QMimeData 267
案例4-18 QMimeData控件的使用方法 269
4.3.2 Drag与Drop 271
案例4-19 QDrag的使用方法1 272
案例4-20 QDrag的使用方法2 276
4.3.3 QClipboard 280
案例4-21 QClipboard控件的使用方法 281
4.4 菜单栏、工具栏、状态栏与快捷键 283
4.4.1 菜单栏QMenu 284
案例4-22 QMenuBar、QMenu和QAction的使用方法 284
4.4.2 快捷键QKeySequence(Edit)、QShortcut 288
案例4-23 QShortcut的使用方法 292
案例4-24 QKeySequenceEdit的使用方法 293
4.4.3 工具栏QToolBar 296
案例4-25 QToolBar的使用方法 296
4.4.4 QStatusBar 300
案例4-26 QStatusBar控件的使用方法 300
4.5 其他控件 303
4.5.1 QFrame 303
案例4-27 QFrame的使用方法 305
4.5.2 QLCDNumber 307
案例4-28 QLCDNumber的使用方法 307
第5章 表格与树 310
5.1 QListWidget 310
5.1.1 增/删项目 311
5.1.2 选择 311
5.1.3 外观 313
5.1.4 工具、状态、帮助提示 313
5.1.5 信号与槽 313
5.1.6 上下文菜单 314
案例5-1 QListWidget控件的使用方法 314
5.2 QTableWidget 323
5.2.1 创建 323
5.2.2 基于item的操作 324
5.2.3 基于行列的操作 324
5.2.4 导航 324
5.2.5 表头(标题) 325
5.2.6 自定义小部件 325
5.2.7 调整行/列的大小 326
5.2.8 拉伸填充剩余空间 327
5.2.9 坐标系 327
5.2.10 信号与槽 327
5.2.11 上下文菜单 328
案例5-2 QTableWidget控件的使用方法 328
5.3 QTreeWidget 335
案例5-3 QTreeWidget控件的使用方法 338
5.4 模型/视图/委托框架 339
5.4.1 模型 339
5.4.2 视图 342
5.4.3 委托 342
5.5 QListView 343
5.5.1 绑定模型和初始化数据 344
5.5.2 增、删、改、查、移 344
5.5.3 列表视图布局 344
5.5.4 其他要点 346
案例5-4 QListView结合QStringListModel的使用方法 346
5.6 QTableView 350
5.6.1 绑定模型和初始化数据 351
5.6.2 模型(QStandardItemModel)的相关函数 351
5.6.3 视图(QTableView)的相关函数 352
5.6.4 表头(标题,QHeaderView)的相关函数 353
5.6.5 上下文菜单 355
案例5-5 QTableView结合QStandardItemModel的使用方法 355
5.7 QTreeView 362
案例5-6 QTreeView控件结合QStandardItemModel模型的使用方法 365
案例5-7 QTreeView和QFileSystemModel的使用方法 366
5.8 自定义模型 367
案例5-8 QTableView控件结合自定义模型的使用方法 368
5.9 自定义委托 374
案例5-9 QTableView控件结合自定义委托的使用方法 374
5.10 Qt数据库 381
5.10.1 Qt SQL简介 381
5.10.2 连接数据库 382
5.10.3 执行SQL语句 386
案例5-10 数据库的创建 387
5.10.4 数据库模型 389
5.10.5 数据库模型与视图的结合 393
案例5-11 QSqlQueryModel分页视图查询 395
案例5-12 QSqlTableModel排序过滤表 399
案例5-13 QSqlRelationalTableModel关系表单 403
5.10.6 数据感知表单 406
案例5-14 QDataWidgetMapper数据感知表单 407
5.10.7 自定义模型与委托 409
案例5-15 数据库自定义模型+委托案例 409
第6章 高级窗口控件 413
6.1 窗口风格 413
6.1.1 设置窗口风格 413
6.1.2 设置窗口样式 414
6.1.3 设置窗口背景 415
6.1.4 设置窗口透明 418
案例6-1 WinStyle案例 418
6.2 布局管理 420
6.2.1 布局管理的基础知识 420
6.2.2 Q(V/H)BoxLayout 423
案例6-2 QBoxLayout的使用方法 425
6.2.3 QGridLayout 428
案例6-3 QGridLayout的使用方法 429
6.2.4 QFormLayout 431
案例6-4 QFormLayout的使用方法 433
6.2.5 QStackedLayout 434
案例6-5 QStackedLayout的使用方法 435
案例6-6 QLayout布局管理的使用方法 436
6.2.6 QSplitter 439
案例6-7 QSplitter控件的使用方法 440
6.3 容器:装载更多的控件 443
6.3.1 QTabWidget 443
案例6-8 QTabWidget的使用方法 444
6.3.2 QStackedWidget 446
案例6-9 QStackedWidget控件的使用方法 446
6.3.3 QToolBox 449
案例6-10 QToolBox的使用方法 450
6.3.4 QDockWidget 451
案例6-11 QDockWidget控件的使用方法1 452
案例6-12 QDockWidget控件的使用方法2 455
6.3.5 多文档界面QMdiArea和QMdiSubWindow 455
案例6-13 QMdiArea控件和QMdiSubWindow控件的使用方法1 459
案例6-14 QMdiArea控件和QMdiSubWindow控件的使用方法2 463
6.3.6 QAxWidget 464
案例6-15 QAxWidget的使用方法 465
6.4 多线程 469
6.4.1 QTimer 469
案例6-16 QTimer的使用方法 470
6.4.2 QThread 472
案例6-17 QThread的使用方法 474
6.4.3 事件处理 477
6.5 网页交互 479
6.5.1 加载内容 479
6.5.2 标题和图标 479
6.5.3 QWebEnginePage的相关方法 479
6.5.4 运行JavaScript函数 482
案例6-18 基于QWebEngineView实现基本的Web浏览功能 483
6.6 QSS的UI美化 486
6.6.1 QSS的基本语法规则 486
6.6.2 QSS选择器的类型 488
6.6.3 QSS子控件 489
6.6.4 QSS伪状态 489
6.6.5 颜色冲突与解决方法 490
6.6.6 继承与多样 491
6.6.7 Qt Designer与样式表 492
案例6-19 QSS的使用方法 493
6.6.8 QDarkStyleSheet 497
案例6-20 QDarkStyle的使用方法 497
6.7 QML浅议 498
6.7.1 QML的基本概念 498
6.7.2 QML与JavaScript 498
6.7.3 在Python中调用QML 499
案例6-21 在Python中调用QML 499
案例6-22 将Python对象暴露给QML:上下文属性 500
案例6-23 将Python对象暴露给QML:注册类型 502
案例6-24 QML调用Python模型 504
案例6-25 在QML中调用Python属性的方法 507
第7章 信号/槽和事件 511
7.1 信号与槽的简介 511
7.1.1 基本介绍 511
7.1.2 创建信号 513
7.1.3 操作信号 513
7.1.4 槽函数 514
7.2 信号与槽的案例 514
案例7-1 信号与槽的使用方法 515
7.2.1 内置信号+内置槽函数 515
7.2.2 内置信号+自定义槽函数 517
7.2.3 自定义信号+内置槽函数 517
7.2.4 自定义信号+自定义槽函数 518
7.2.5 断开信号与槽连接 518
7.2.6 恢复信号与槽连接 519
7.2.7 装饰器信号与槽连接 521
7.2.8 多线程信号与槽连接 522
7.3 信号与槽的参数 523
案例7-2 信号与槽的参数 523
7.3.1 内置信号+默认参数 524
7.3.2 自定义信号+默认参数 524
7.3.3 内置信号+自定义参数lambda 525
7.3.4 内置信号+自定义参数partial 526
7.3.5 自定义信号+自定义参数lambda 527
7.3.6 自定义信号+自定义参数partial 528
7.4 基于Qt Designer的信号与槽 529
案例7-3 基于Qt Designer的信号与槽的使用方法 530
7.5 事件处理机制 532
7.5.1 事件处理机制和信号/槽机制的区别 533
7.5.2 常见事件类型 533
7.5.3 使用事件处理的方法 536
7.5.4 经典案例分析 537
案例7-4 事件处理机制的方法1和方法2 537
案例7-5 事件处理机制的方法3 543
案例7-6 事件处理机制的方法4 546
第8章 Python的扩展应用 547
8.1 使用PyInstaller打包项目生成.exe文件 547
8.1.1 安装PyInstaller 547
8.1.2 PyInstaller的用法与参数 548
8.1.3 PyInstaller案例 550
8.2 Pandas在PySide/PyQt中的应用 552
8.2.1 qtpandas模块库的安装 552
8.2.2 官方案例解读 553
8.2.3 设置提升的窗口部件 555
8.2.4 qtpandas的使用 557
8.3 Matplotlib在PyQt中的应用 559
8.3.1 对MatplotlibWidget的解读 560
8.3.2 设置提升的窗口部件 563
8.3.3 MatplotlibWidget的使用 564
8.3.4 更多扩展 565
8.4 PyQtGraph在PyQt中的应用 566
8.4.1 PyQtGraph的安装 567
8.4.2 官方案例解读 567
8.4.3 设置提升的窗口部件 569
8.4.4 PyQtGraph的使用 569
8.4.5 更多扩展 573
8.5 Plotly在PyQt中的应用 573
8.5.1 Plotly的安装 574
8.5.2 案例解读 574
8.5.3 设置提升的窗口部件 575
8.5.4 Plotly的使用 576
8.5.5 Plotly的更多扩展 579
8.5.6 Dash的使用 579
8.5.7 Dash的更多扩展 583
第9章 实战应用 584
9.1 在量化投资中的应用 584
9.2 在券商投研中的应用 593
9.2.1 从爬虫说起 594
9.2.2 程序解读 595
附录A Qt for Python代码转换 618
附录B C++ to Python代码转换 624
附录C 本书一些通用枚举表格目录 630
附录D 优秀PySide/PyQt开源项目推荐 631

读者评论