本書(shū)既是介紹PyQt5的快速入門(mén)書(shū)籍,也是介紹PyQt5實(shí)戰(zhàn)應(yīng)用的書(shū)籍。本書(shū)學(xué)習(xí)曲線(xiàn)平緩,除了適合初學(xué)者之外,其內(nèi)容詳細(xì)和廣泛的特點(diǎn)又使得其非常適合做軟件工程師們的案頭查詢(xún)手冊(cè),大大節(jié)省了繁忙的工程師去查閱和篩選信息的時(shí)間,做到一本在手,PyQt我有。本書(shū)配套示例源碼。
本書(shū)共分11章,從最基本的PyQt5環(huán)境搭建開(kāi)始,不但有PyQt5窗口設(shè)計(jì)基礎(chǔ)、PyQt5常用控件、菜單、工具欄和狀態(tài)欄、對(duì)話(huà)框應(yīng)用、布局管理等基礎(chǔ)知識(shí),還包括了多線(xiàn)程編程、數(shù)據(jù)庫(kù)編程、圖形圖像編程和網(wǎng)絡(luò)編程等。本書(shū)聚焦PyQt5,內(nèi)容雖多但都是實(shí)實(shí)在在的干貨。
本書(shū)旨在幫助讀者以最短的時(shí)間掌握PyQt5的基礎(chǔ)知識(shí)及實(shí)戰(zhàn)應(yīng)用,適合PyQt5初學(xué)者以及開(kāi)發(fā)工程師,也適合作為高等院校計(jì)算機(jī)軟件開(kāi)發(fā)及相關(guān)專(zhuān)業(yè)的教材。
? 本書(shū)學(xué)習(xí)曲線(xiàn)平緩,內(nèi)容系統(tǒng)全面,適合做為入門(mén)書(shū)和查詢(xún)手冊(cè)
? 幫助讀者用最短的時(shí)間掌握PyQt 5的編程技巧及實(shí)戰(zhàn)應(yīng)用
? 配套示例源碼、PPT課件、作者QQ群答疑服務(wù)
Python近幾年無(wú)疑是編程語(yǔ)言屆的黑馬了,橫掃了TIOBE、Stack Overflow各大榜單。根據(jù)IEEE Spectrum發(fā)布的編程語(yǔ)言排行榜,2022年主流的十大編程語(yǔ)言中,Python排名第一,而且Python的語(yǔ)言?xún)?yōu)勢(shì)也很多,簡(jiǎn)單易學(xué)、免費(fèi)/開(kāi)源、速度快/效率高、可移植性強(qiáng)、面向?qū)ο蟆⒖蓴U(kuò)展性、可嵌入性、豐富的庫(kù)等都是Python的優(yōu)勢(shì),而且Python相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,對(duì)新手友好,這些都決定了學(xué)Python不怕學(xué)不會(huì),也不怕沒(méi)前途。去年就是Python摘得IEEE的桂冠,今年依舊如此;仡櫧鼛啄甑木幊陶Z(yǔ)言,還沒(méi)有另外一門(mén)編程語(yǔ)言發(fā)展得如此迅猛。各種榜單的加持下,似乎不學(xué)Python就被打上落后的標(biāo)簽了。
那么Qt呢?Qt作為一個(gè)跨平臺(tái)的開(kāi)源UI(用戶(hù)界面)應(yīng)用程序開(kāi)發(fā)框架,在國(guó)內(nèi)外的應(yīng)用有很大的發(fā)展,尤其是面向軍工、嵌入式、自主可控的信息安全行業(yè),應(yīng)用更是廣泛。所以,掌握Qt的開(kāi)發(fā)技能對(duì)于跨平臺(tái)開(kāi)發(fā)者而言顯得尤為重要,因?yàn)楫?dāng)今很多商業(yè)軟件都要求能在多個(gè)操作系統(tǒng)下運(yùn)行。在跨平臺(tái)圖形界面編程世界,Qt已經(jīng)是事實(shí)上的霸主。
那么由Python和Qt結(jié)合起來(lái)的PyQt,當(dāng)然是讓Python開(kāi)發(fā)者如虎添翼!使得Python開(kāi)發(fā)技能更加完善。本書(shū)既是介紹PyQt5的快速入門(mén)書(shū)籍,也是介紹PyQt5實(shí)戰(zhàn)應(yīng)用的書(shū)籍。PyQt5是對(duì)Qt所有類(lèi)的Python封裝,即可以利用Qt的強(qiáng)大功能,也可以利用Python豐富的生態(tài),同時(shí)能夠結(jié)合Python簡(jiǎn)潔的語(yǔ)法進(jìn)行操作,其結(jié)果就是使用PyQt5可以高效簡(jiǎn)單地開(kāi)發(fā)出自己想要的程序。本書(shū)實(shí)例豐富,對(duì)PyQt5基礎(chǔ)知識(shí)的介紹比較全面,同時(shí)對(duì)新手使用PyQt5的一些重點(diǎn)難點(diǎn)都有專(zhuān)門(mén)的章節(jié)進(jìn)行針對(duì)性分析,本書(shū)相對(duì)于市面上其它PyQt開(kāi)發(fā)書(shū)籍來(lái)說(shuō),就是循序漸進(jìn),充分照顧初學(xué)者,使得初學(xué)者的學(xué)習(xí)曲線(xiàn)非常平緩,因此特別適合作為大專(zhuān)院校和軟件培訓(xùn)班的教科用書(shū)。同時(shí),本書(shū)實(shí)例豐富、注釋詳細(xì),能幫助讀者快速掌握PyQt5的實(shí)戰(zhàn)應(yīng)用,我們知道實(shí)例的作用非常大,稍微有經(jīng)驗(yàn)的工程師看一遍帶注釋的代碼,基本就能掌握開(kāi)發(fā)精髓。
本書(shū)既有手工寫(xiě)代碼的方式,這是深刻理解原理的基礎(chǔ),也采用了主流的可視化界面開(kāi)發(fā)工具Qt Designer進(jìn)行圖形界面的設(shè)計(jì),并采用Python世界的主流集成開(kāi)發(fā)環(huán)境PyCharm進(jìn)行代碼編輯和調(diào)試等,PyCharm是一種Python IDE(Integrated Development Environment,集成開(kāi)發(fā)環(huán)境),帶有一整套可以幫助用戶(hù)在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,比如調(diào)試、語(yǔ)法高亮、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制。可以說(shuō),學(xué)會(huì)本書(shū),不但學(xué)會(huì)了PyQt5,而且也學(xué)會(huì)了Qt Designer和PyCharm。
本書(shū)作者為朱文偉和李建英,雖然我們已經(jīng)用心在寫(xiě)本書(shū),但是疏漏之處在所難免,希望讀者不吝指教,郵箱為booksaga@163.com,郵件主題寫(xiě)PyQt 5.x從入門(mén)到精通。
作 者
2022年9月
朱文偉,名校計(jì)算機(jī)專(zhuān)業(yè)統(tǒng)招碩士,20年C\C 、Java開(kāi)發(fā)經(jīng)驗(yàn)。主導(dǎo)開(kāi)發(fā)過(guò)密碼、圖形、人工智能等產(chǎn)品。精通Linux、Windows系統(tǒng)開(kāi)發(fā)及數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)。著有圖書(shū)《Windows C/C 加密解密實(shí)戰(zhàn)》《密碼學(xué)原理與Java實(shí)現(xiàn)》《Linux C與C 一線(xiàn)開(kāi)發(fā)實(shí)踐》《Visual C 2017從入門(mén)到精通》《OpenCV 4.5計(jì)算機(jī)視覺(jué)開(kāi)發(fā)實(shí)戰(zhàn)(基于VC )》《OpenCV 4.5計(jì)算機(jī)視覺(jué)開(kāi)發(fā)實(shí)戰(zhàn):基于Python》。
第1章 Qt概述 1
1.1 Qt簡(jiǎn)介 1
1.2 發(fā)展歷程 1
1.3 Qt優(yōu)點(diǎn) 2
1.4 Qt的主要應(yīng)用領(lǐng)域 3
1.5 認(rèn)識(shí)PyQt 5
第2章 搭建PyQt開(kāi)發(fā)環(huán)境 7
2.1 搭建Windows下的PyQt開(kāi)發(fā)環(huán)境 7
2.1.1 下載和安裝Python 7
2.1.2 Pycharm開(kāi)發(fā)Python程序 9
2.1.3 安裝PyQt 11
2.1.4 安裝可視化界面設(shè)計(jì)器 21
2.1.5 集成Qt Designer到PyCharm 30
2.1.6 PyCharm的一些小技巧 39
2.1.7 卸載PyQt 40
2.2 PyQt 的功能模塊 40
第3章 PyQt編程基礎(chǔ) 50
3.1 字節(jié)數(shù)組類(lèi)QByteArray 52
3.1.1 Unicode編碼及其UTF-8實(shí)現(xiàn) 52
3.1.2 Python中bytes 類(lèi) 54
3.1.3 構(gòu)造函數(shù) 56
3.1.4 數(shù)組信息 57
3.1.5 增加數(shù)據(jù) 57
3.1.6 刪除數(shù)據(jù) 59
3.1.7 修改數(shù)據(jù) 60
3.1.8 查找 62
3.1.9 提取內(nèi)容 63
3.1.10 切分 65
3.1.11 轉(zhuǎn)換 65
3.1.12 比較 71
3.2 認(rèn)識(shí)PyQt界面Widgets 71
3.3 PyQt中界面相關(guān)的類(lèi)庫(kù) 72
3.3.1 類(lèi)QObject 73
3.3.2 類(lèi)QWidget 74
3.3.3 和主窗口有關(guān)的類(lèi) 74
3.3.4 對(duì)話(huà)框和控件類(lèi) 75
3.3.5 QtWidgets應(yīng)用程序類(lèi)型 75
3.4 獲取當(dāng)前時(shí)間 75
3.5 事件機(jī)制 77
3.5.1 基本概念 77
3.5.2 事件來(lái)源 78
3.5.3 事件的描述 78
3.5.4 事件的類(lèi)型 78
3.5.5 GUI應(yīng)用程序的事件處理流程 79
3.5.6 事件的傳遞 79
3.5.7 事件處理和過(guò)濾的方式 79
3.6 信號(hào)和槽 86
3.6.1 基本概念 86
3.6.2 事件機(jī)制與信號(hào)槽機(jī)制的區(qū)別 88
3.6.3 內(nèi)置信號(hào)與內(nèi)置槽函數(shù) 88
3.6.4 內(nèi)置信號(hào)與自定義槽函數(shù) 90
3.6.5 自定義信號(hào)與內(nèi)置槽函數(shù) 91
3.6.6 自定義信號(hào)與自定義槽函數(shù) 93
3.6.7 Qt中的坐標(biāo)系統(tǒng) 98
第4章 PyQt對(duì)話(huà)框程序設(shè)計(jì) 102
4.1 對(duì)話(huà)框程序設(shè)計(jì)概述 102
4.2 QDialog類(lèi)及其函數(shù) 102
4.3 創(chuàng)建對(duì)話(huà)框程序 104
4.3.2 設(shè)置對(duì)話(huà)框的尺寸、圖標(biāo)和背景圖片 108
4.4 在對(duì)話(huà)框上使用按鈕控件 118
4.4.1 顯示控件工具箱 119
4.4.2 拖動(dòng)一個(gè)按鈕到對(duì)話(huà)框 120
4.4.3 選中按鈕控件 120
4.4.4 移動(dòng)對(duì)話(huà)框上的按鈕控件 120
4.4.5 對(duì)齊對(duì)話(huà)框上的按鈕控件 120
4.4.6 調(diào)整按鈕控件的大小 121
4.4.7 刪除對(duì)話(huà)框上的按鈕控件 121
4.4.8 為按鈕添加信號(hào)處理函數(shù) 121
4.5 模態(tài)對(duì)話(huà)框和非模態(tài)對(duì)話(huà)框 128
4.6 通用對(duì)話(huà)框 133
4.6.1 消息對(duì)話(huà)框QMessageBox 134
4.6.2 文件對(duì)話(huà)框QFileDialog 141
4.6.3 字體對(duì)話(huà)框QFontDialog 149
4.6.4 顏色對(duì)話(huà)框 151
4.7 移動(dòng)對(duì)話(huà)框到指定位置 152
4.8 在對(duì)話(huà)框非標(biāo)題欄區(qū)域?qū)崿F(xiàn)拖動(dòng) 154
第5章 PyQt控件設(shè)計(jì) 156
5.1 控件概述 156
5.2 對(duì)話(huà)框程序設(shè)計(jì)概述 156
5.3 按鈕類(lèi)控件 157
5.3.1 概述 157
5.3.2 按鈕類(lèi)的父類(lèi)QAbstractButton 158
5.3.3 推壓按鈕QPushButton 158
5.3.4 工具按鈕QToolButton 165
5.3.5 單選按鈕Radio Button 168
5.3.6 復(fù)選框按鈕QCheckBox 173
5.3.7 對(duì)話(huà)框組合按鈕QDialogButtonBox 178
5.4 列表視圖控件QListView 179
5.4.1 抽象數(shù)據(jù)項(xiàng)模型QAbstractItemModel 180
5.4.2 字符串列表數(shù)據(jù)模型QStringListModel 181
5.4.3 文件系統(tǒng)數(shù)據(jù)模型QDirModel 184
5.5 樹(shù)形視圖控件QTreeView 187
5.5.1 標(biāo)準(zhǔn)數(shù)據(jù)項(xiàng)QStandardItem 187
5.5.2 標(biāo)準(zhǔn)數(shù)據(jù)項(xiàng)模型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 添加內(nèi)容項(xiàng)和設(shè)置圖標(biāo) 205
5.7.2 刪除某個(gè)內(nèi)容項(xiàng) 205
5.7.3 清空組合框內(nèi)容 205
5.7.4 QComboBox列表項(xiàng)的訪(fǎng)問(wèn) 205
5.7.5 選擇項(xiàng)發(fā)生變化時(shí)的信號(hào) 206
5.8 字體組合框 207
5.9 標(biāo)簽控件QLabel 208
5.10 分組框控件QGroupBox 215
5.11 正則表達(dá)式和類(lèi)QRegExp 216
5.11.1 正則表達(dá)式規(guī)則 216
5.11.2 正則表達(dá)式中的一些高級(jí)規(guī)則 219
5.11.3 其他通用規(guī)則 221
5.11.4 表達(dá)式屬性 222
5.11.5 類(lèi)QRegExp 222
5.12 行編輯框QLineEdit 226
5.12.1 常用成員函數(shù) 226
5.12.2 描述輸入框顯示其內(nèi)容的枚舉 227
5.12.3 對(duì)齊方式 227
5.12.4 獲取和設(shè)置選擇的文本 227
5.12.5 常用信號(hào) 227
5.12.6 限制字符的輸入 228
5.13 進(jìn)度條控件QProgressBar 233
5.13.1 QProgressBar常用函數(shù) 234
5.13.2 進(jìn)度方向 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數(shù)據(jù)庫(kù)編程 240
6.1 數(shù)據(jù)庫(kù)的基本概念 240
6.1.1 數(shù)據(jù)庫(kù) 240
6.1.2 數(shù)據(jù)庫(kù)管理系統(tǒng) 241
6.1.3 SQL語(yǔ)言 241
6.2 QtSql模塊 241
6.2.1 驅(qū)動(dòng)層 242
6.2.2 SQL接口層 243
6.2.3 用戶(hù)接口層 243
6.3 訪(fǎng)問(wèn)數(shù)據(jù)庫(kù) 243
6.3.1 訪(fǎng)問(wèn)微軟的Access 243
6.3.2 訪(fǎng)問(wèn)Sqlite數(shù)據(jù)庫(kù) 248
第7章 PyQt文件編程 254
7.1 Qt下Python文件編程 254
7.1.1 文件路徑 254
7.1.2 當(dāng)前工作目錄 257
7.1.3 絕對(duì)路徑與相對(duì)路徑 257
7.1.4 Python文件基本操作 259
7.1.5 打開(kāi)文件函數(shù) 259
7.1.6 讀取文件函數(shù) 263
7.1.7 按行讀取文件 264
7.1.8 向文件中寫(xiě)入數(shù)據(jù) 266
7.1.9 關(guān)閉文件 268
7.1.10 seek和tell函數(shù) 269
7.2 利用PyQt庫(kù)進(jìn)行文件編程 271
7.2.1 輸入/輸出設(shè)備類(lèi) 271
7.2.2 文件類(lèi)QFile 271
第8章 PyQt圖形編程 282
8.1 概述 282
8.2 重繪事件處理函數(shù)paintEvent 283
8.3 點(diǎn)坐標(biāo)類(lèi)QPOINT 285
8.3.1 成員函數(shù) 285
8.3.2 相關(guān)非成員 286
8.3.3 定義一個(gè)點(diǎn) 286
8.3.4 計(jì)算歐式距離(兩點(diǎn)之間的距離) 286
8.3.5 獲取和設(shè)置點(diǎn)的分量值 287
8.4 矩形尺寸類(lèi)QSize 288
8.4.1 定義一個(gè)矩形尺寸 289
8.4.2 獲取和設(shè)置矩形尺寸的寬度和高度 289
8.4.3 縮放矩形尺寸 290
8.5 顏 色 292
8.5.1 構(gòu)造顏色 294
8.5.2 獲取和設(shè)置rgb分量 294
8.6 畫(huà)筆類(lèi)QPen 296
8.6.1 畫(huà)筆的屬性 296
8.6.2 構(gòu)造一支畫(huà)筆 299
8.6.3 獲取或設(shè)置畫(huà)筆顏色 300
8.6.4 獲取或設(shè)置畫(huà)筆寬度 300
8.6.5 獲取或設(shè)置畫(huà)筆線(xiàn)型樣式 300
8.7 畫(huà) 刷 302
8.8 畫(huà)圖類(lèi)QPainter 310
8.8.1 畫(huà)直線(xiàn) 311
8.8.2 畫(huà)矩形 311
8.8.3 畫(huà)橢圓和圓 312
8.8.4 繪制文本 312
第9章 菜單欄、工具欄和狀態(tài)欄 316
9.1 菜單的設(shè)計(jì)與開(kāi)發(fā) 316
9.1.1 菜單欄類(lèi)QMenuBar 318
9.1.2 動(dòng)作類(lèi)QAction 319
9.1.3 菜單類(lèi)QMenu 319
9.1.4 可視化添加菜單 324
9.1.5 右鍵菜單 327
9.2 工具欄的設(shè)計(jì)與開(kāi)發(fā) 329
9.3 狀態(tài)欄的設(shè)計(jì)與開(kāi)發(fā) 331
9.3.2 子菜單項(xiàng)提示信息顯示在狀態(tài)欄上 334
9.3.3 臨時(shí)信息不需要標(biāo)簽 335
9.3.4 狀態(tài)欄上使用按鈕 336
第10章 多線(xiàn)程基本編程 339
10.1 使用多線(xiàn)程的好處 339
10.2 多線(xiàn)程編程的基本概念 340
10.2.1 操作系統(tǒng)和多線(xiàn)程 340
10.2.2 線(xiàn)程的基本概念 340
10.2.3 線(xiàn)程的狀態(tài) 341
10.2.4 線(xiàn)程函數(shù) 342
10.2.5 線(xiàn)程標(biāo)識(shí) 342
10.2.6 QThread的基本使用 342
10.2.7 線(xiàn)程間通信 345
第11章 PyQt網(wǎng)絡(luò)編程 350
11.1 TCP/IP協(xié)議 350
11.1.1 基本概念 350
11.1.2 TCP/IP協(xié)議的分層結(jié)構(gòu) 350
11.2 獲取主機(jī)網(wǎng)絡(luò)信息 352
11.2.1 類(lèi)QHostInfo 352
11.2.2 查詢(xún)本機(jī)主機(jī)名 353
11.2.3 查詢(xún)遠(yuǎn)程主機(jī)的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簡(jiǎn)介 373
11.5.2 HTTP工作原理 373
11.5.3 HTTP的特點(diǎn) 374
11.5.4 HTTP 消息結(jié)構(gòu) 374
11.5.5 客戶(hù)端請(qǐng)求消息 374
11.5.6 服務(wù)器響應(yīng)消息 375
11.5.7 HTTP狀態(tài)碼 377
11.5.8 HTTP狀態(tài)碼分類(lèi) 377
11.5.9 JSON數(shù)據(jù) 377
11.5.10 HTTP GET請(qǐng)求 380
11.5.11 HTTP POST請(qǐng)求 381
11.5.12 使用QNetworkAccessManager進(jìn)行身份驗(yàn)證 383
11.5.13 提取一個(gè)網(wǎng)站圖標(biāo) 384
11.6 FTP開(kāi)發(fā) 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應(yīng)答碼 391
11.6.7 開(kāi)發(fā)FTP客戶(hù)端 392
第12章 PyQt多媒體編程 399
12.1 概述 399
12.2 視頻播放類(lèi)QMediaPlayer 400
12.2.1 重要成員函數(shù) 400
12.2.2 重要信號(hào) 400
12.2.3 播放音頻 402
12.3 視頻部件類(lèi)QVideoWidget 405
12.4 播放列表類(lèi)QMediaPlaylist 408