本书既是介绍PyQt5的快速入门书籍,也是介绍PyQt5实战应用的书籍。本书学习曲线平缓,除了适合初学者之外,其内容详细和广泛的特点又使得其非常适合做软件工程师们的案头查询手册,大大节省了繁忙的工程师去查阅和筛选信息的时间,做到一本在手,PyQt我有。本书配套示例源码。
本书共分11章,从最基本的PyQt5环境搭建开始,不但有PyQt5窗口设计基础、PyQt5常用控件、菜单、工具栏和状态栏、对话框应用、布局管理等基础知识,还包括了多线程编程、数据库编程、图形图像编程和网络编程等。本书聚焦PyQt5,内容虽多但都是实实在在的干货。
本书旨在帮助读者以最短的时间掌握PyQt5的基础知识及实战应用,适合PyQt5初学者以及开发工程师,也适合作为高等院校计算机软件开发及相关专业的教材。
? 本书学习曲线平缓,内容系统全面,适合做为入门书和查询手册
? 帮助读者用最短的时间掌握PyQt 5的编程技巧及实战应用
? 配套示例源码、PPT课件、作者QQ群答疑服务
Python近几年无疑是编程语言届的黑马了,横扫了TIOBE、Stack Overflow各大榜单。根据IEEE Spectrum发布的编程语言排行榜,2022年主流的十大编程语言中,Python排名第一,而且Python的语言优势也很多,简单易学、免费/开源、速度快/效率高、可移植性强、面向对象、可扩展性、可嵌入性、丰富的库等都是Python的优势,而且Python相对来说比较简单,对新手友好,这些都决定了学Python不怕学不会,也不怕没前途。去年就是Python摘得IEEE的桂冠,今年依旧如此。回顾近几年的编程语言,还没有另外一门编程语言发展得如此迅猛。各种榜单的加持下,似乎不学Python就被打上落后的标签了。
那么Qt呢?Qt作为一个跨平台的开源UI(用户界面)应用程序开发框架,在国内外的应用有很大的发展,尤其是面向军工、嵌入式、自主可控的信息安全行业,应用更是广泛。所以,掌握Qt的开发技能对于跨平台开发者而言显得尤为重要,因为当今很多商业软件都要求能在多个操作系统下运行。在跨平台图形界面编程世界,Qt已经是事实上的霸主。
那么由Python和Qt结合起来的PyQt,当然是让Python开发者如虎添翼!使得Python开发技能更加完善。本书既是介绍PyQt5的快速入门书籍,也是介绍PyQt5实战应用的书籍。PyQt5是对Qt所有类的Python封装,即可以利用Qt的强大功能,也可以利用Python丰富的生态,同时能够结合Python简洁的语法进行操作,其结果就是使用PyQt5可以高效简单地开发出自己想要的程序。本书实例丰富,对PyQt5基础知识的介绍比较全面,同时对新手使用PyQt5的一些重点难点都有专门的章节进行针对性分析,本书相对于市面上其它PyQt开发书籍来说,就是循序渐进,充分照顾初学者,使得初学者的学习曲线非常平缓,因此特别适合作为大专院校和软件培训班的教科用书。同时,本书实例丰富、注释详细,能帮助读者快速掌握PyQt5的实战应用,我们知道实例的作用非常大,稍微有经验的工程师看一遍带注释的代码,基本就能掌握开发精髓。
本书既有手工写代码的方式,这是深刻理解原理的基础,也采用了主流的可视化界面开发工具Qt Designer进行图形界面的设计,并采用Python世界的主流集成开发环境PyCharm进行代码编辑和调试等,PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。可以说,学会本书,不但学会了PyQt5,而且也学会了Qt Designer和PyCharm。
本书作者为朱文伟和李建英,虽然我们已经用心在写本书,但是疏漏之处在所难免,希望读者不吝指教,邮箱为booksaga@163.com,邮件主题写PyQt 5.x从入门到精通。
作 者
2022年9月
朱文伟,名校计算机专业统招硕士,20年C\C 、Java开发经验。主导开发过密码、图形、人工智能等产品。精通Linux、Windows系统开发及数据库开发技术。著有图书《Windows C/C 加密解密实战》《密码学原理与Java实现》《Linux C与C 一线开发实践》《Visual C 2017从入门到精通》《OpenCV 4.5计算机视觉开发实战(基于VC )》《OpenCV 4.5计算机视觉开发实战:基于Python》。
第1章 Qt概述 1
1.1 Qt简介 1
1.2 发展历程 1
1.3 Qt优点 2
1.4 Qt的主要应用领域 3
1.5 认识PyQt 5
第2章 搭建PyQt开发环境 7
2.1 搭建Windows下的PyQt开发环境 7
2.1.1 下载和安装Python 7
2.1.2 Pycharm开发Python程序 9
2.1.3 安装PyQt 11
2.1.4 安装可视化界面设计器 21
2.1.5 集成Qt Designer到PyCharm 30
2.1.6 PyCharm的一些小技巧 39
2.1.7 卸载PyQt 40
2.2 PyQt 的功能模块 40
第3章 PyQt编程基础 50
3.1 字节数组类QByteArray 52
3.1.1 Unicode编码及其UTF-8实现 52
3.1.2 Python中bytes 类 54
3.1.3 构造函数 56
3.1.4 数组信息 57
3.1.5 增加数据 57
3.1.6 删除数据 59
3.1.7 修改数据 60
3.1.8 查找 62
3.1.9 提取内容 63
3.1.10 切分 65
3.1.11 转换 65
3.1.12 比较 71
3.2 认识PyQt界面Widgets 71
3.3 PyQt中界面相关的类库 72
3.3.1 类QObject 73
3.3.2 类QWidget 74
3.3.3 和主窗口有关的类 74
3.3.4 对话框和控件类 75
3.3.5 QtWidgets应用程序类型 75
3.4 获取当前时间 75
3.5 事件机制 77
3.5.1 基本概念 77
3.5.2 事件来源 78
3.5.3 事件的描述 78
3.5.4 事件的类型 78
3.5.5 GUI应用程序的事件处理流程 79
3.5.6 事件的传递 79
3.5.7 事件处理和过滤的方式 79
3.6 信号和槽 86
3.6.1 基本概念 86
3.6.2 事件机制与信号槽机制的区别 88
3.6.3 内置信号与内置槽函数 88
3.6.4 内置信号与自定义槽函数 90
3.6.5 自定义信号与内置槽函数 91
3.6.6 自定义信号与自定义槽函数 93
3.6.7 Qt中的坐标系统 98
第4章 PyQt对话框程序设计 102
4.1 对话框程序设计概述 102
4.2 QDialog类及其函数 102
4.3 创建对话框程序 104
4.3.2 设置对话框的尺寸、图标和背景图片 108
4.4 在对话框上使用按钮控件 118
4.4.1 显示控件工具箱 119
4.4.2 拖动一个按钮到对话框 120
4.4.3 选中按钮控件 120
4.4.4 移动对话框上的按钮控件 120
4.4.5 对齐对话框上的按钮控件 120
4.4.6 调整按钮控件的大小 121
4.4.7 删除对话框上的按钮控件 121
4.4.8 为按钮添加信号处理函数 121
4.5 模态对话框和非模态对话框 128
4.6 通用对话框 133
4.6.1 消息对话框QMessageBox 134
4.6.2 文件对话框QFileDialog 141
4.6.3 字体对话框QFontDialog 149
4.6.4 颜色对话框 151
4.7 移动对话框到指定位置 152
4.8 在对话框非标题栏区域实现拖动 154
第5章 PyQt控件设计 156
5.1 控件概述 156
5.2 对话框程序设计概述 156
5.3 按钮类控件 157
5.3.1 概述 157
5.3.2 按钮类的父类QAbstractButton 158
5.3.3 推压按钮QPushButton 158
5.3.4 工具按钮QToolButton 165
5.3.5 单选按钮Radio Button 168
5.3.6 复选框按钮QCheckBox 173
5.3.7 对话框组合按钮QDialogButtonBox 178
5.4 列表视图控件QListView 179
5.4.1 抽象数据项模型QAbstractItemModel 180
5.4.2 字符串列表数据模型QStringListModel 181
5.4.3 文件系统数据模型QDirModel 184
5.5 树形视图控件QTreeView 187
5.5.1 标准数据项QStandardItem 187
5.5.2 标准数据项模型QStandardItemModel 188
5.5.3 添加表头 192
5.5.4 隐藏表头 192
5.5.5 条目的操作 192
5.6 Tree Widge控件 202
5.7 组合框QComboBox 204
5.7.1 添加内容项和设置图标 205
5.7.2 删除某个内容项 205
5.7.3 清空组合框内容 205
5.7.4 QComboBox列表项的访问 205
5.7.5 选择项发生变化时的信号 206
5.8 字体组合框 207
5.9 标签控件QLabel 208
5.10 分组框控件QGroupBox 215
5.11 正则表达式和类QRegExp 216
5.11.1 正则表达式规则 216
5.11.2 正则表达式中的一些高级规则 219
5.11.3 其他通用规则 221
5.11.4 表达式属性 222
5.11.5 类QRegExp 222
5.12 行编辑框QLineEdit 226
5.12.1 常用成员函数 226
5.12.2 描述输入框显示其内容的枚举 227
5.12.3 对齐方式 227
5.12.4 获取和设置选择的文本 227
5.12.5 常用信号 227
5.12.6 限制字符的输入 228
5.13 进度条控件QProgressBar 233
5.13.1 QProgressBar常用函数 234
5.13.2 进度方向 235
5.13.3 文本显示 235
5.13.4 繁忙指示 236
5.14 布局管理器 237
5.14.1 基本布局管理器QBoxLayout 238
5.14.2 栅格布局管理器QGridLayout 238
5.14.3 窗体布局管理器QFormLayout 239
第6章 PyQt数据库编程 240
6.1 数据库的基本概念 240
6.1.1 数据库 240
6.1.2 数据库管理系统 241
6.1.3 SQL语言 241
6.2 QtSql模块 241
6.2.1 驱动层 242
6.2.2 SQL接口层 243
6.2.3 用户接口层 243
6.3 访问数据库 243
6.3.1 访问微软的Access 243
6.3.2 访问Sqlite数据库 248
第7章 PyQt文件编程 254
7.1 Qt下Python文件编程 254
7.1.1 文件路径 254
7.1.2 当前工作目录 257
7.1.3 绝对路径与相对路径 257
7.1.4 Python文件基本操作 259
7.1.5 打开文件函数 259
7.1.6 读取文件函数 263
7.1.7 按行读取文件 264
7.1.8 向文件中写入数据 266
7.1.9 关闭文件 268
7.1.10 seek和tell函数 269
7.2 利用PyQt库进行文件编程 271
7.2.1 输入/输出设备类 271
7.2.2 文件类QFile 271
第8章 PyQt图形编程 282
8.1 概述 282
8.2 重绘事件处理函数paintEvent 283
8.3 点坐标类QPOINT 285
8.3.1 成员函数 285
8.3.2 相关非成员 286
8.3.3 定义一个点 286
8.3.4 计算欧式距离(两点之间的距离) 286
8.3.5 获取和设置点的分量值 287
8.4 矩形尺寸类QSize 288
8.4.1 定义一个矩形尺寸 289
8.4.2 获取和设置矩形尺寸的宽度和高度 289
8.4.3 缩放矩形尺寸 290
8.5 颜 色 292
8.5.1 构造颜色 294
8.5.2 获取和设置rgb分量 294
8.6 画笔类QPen 296
8.6.1 画笔的属性 296
8.6.2 构造一支画笔 299
8.6.3 获取或设置画笔颜色 300
8.6.4 获取或设置画笔宽度 300
8.6.5 获取或设置画笔线型样式 300
8.7 画 刷 302
8.8 画图类QPainter 310
8.8.1 画直线 311
8.8.2 画矩形 311
8.8.3 画椭圆和圆 312
8.8.4 绘制文本 312
第9章 菜单栏、工具栏和状态栏 316
9.1 菜单的设计与开发 316
9.1.1 菜单栏类QMenuBar 318
9.1.2 动作类QAction 319
9.1.3 菜单类QMenu 319
9.1.4 可视化添加菜单 324
9.1.5 右键菜单 327
9.2 工具栏的设计与开发 329
9.3 状态栏的设计与开发 331
9.3.2 子菜单项提示信息显示在状态栏上 334
9.3.3 临时信息不需要标签 335
9.3.4 状态栏上使用按钮 336
第10章 多线程基本编程 339
10.1 使用多线程的好处 339
10.2 多线程编程的基本概念 340
10.2.1 操作系统和多线程 340
10.2.2 线程的基本概念 340
10.2.3 线程的状态 341
10.2.4 线程函数 342
10.2.5 线程标识 342
10.2.6 QThread的基本使用 342
10.2.7 线程间通信 345
第11章 PyQt网络编程 350
11.1 TCP/IP协议 350
11.1.1 基本概念 350
11.1.2 TCP/IP协议的分层结构 350
11.2 获取主机网络信息 352
11.2.1 类QHostInfo 352
11.2.2 查询本机主机名 353
11.2.3 查询远程主机的IP地址 354
11.3 TCP编程 355
11.4 UDP编程 366
11.4.1 UDP通信概述 366
11.4.2 UDP单播编程 366
11.4.3 单播、多播(组播)和广播 370
11.5 HTTP操作 372
11.5.1 HTTP简介 373
11.5.2 HTTP工作原理 373
11.5.3 HTTP的特点 374
11.5.4 HTTP 消息结构 374
11.5.5 客户端请求消息 374
11.5.6 服务器响应消息 375
11.5.7 HTTP状态码 377
11.5.8 HTTP状态码分类 377
11.5.9 JSON数据 377
11.5.10 HTTP GET请求 380
11.5.11 HTTP POST请求 381
11.5.12 使用QNetworkAccessManager进行身份验证 383
11.5.13 提取一个网站图标 384
11.6 FTP开发 385
11.6.1 FTP概述 385
11.6.2 FTP的工作原理 386
11.6.3 FTP的传输方式 387
11.6.4 FTP的工作方式 387
11.6.5 FTP命令 388
11.6.6 FTP应答码 391
11.6.7 开发FTP客户端 392
第12章 PyQt多媒体编程 399
12.1 概述 399
12.2 视频播放类QMediaPlayer 400
12.2.1 重要成员函数 400
12.2.2 重要信号 400
12.2.3 播放音频 402
12.3 视频部件类QVideoWidget 405
12.4 播放列表类QMediaPlaylist 408