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