Python Qt GUI與資料視覺化程式設計 | 被動收入的投資秘訣 - 2024年8月
![](https://www.books.com.tw/img/CN1/167/01/CN11670138.jpg)
Python Qt GUI與資料視覺化程式設計
本書介紹在Python中使用PyQt5和其他模組進行GUI和資料視覺化程式設計的方法。第一部分介紹PyQt5設計GUI程式的基本框架,包括GUI應用程式的基本結構、表單UI視覺化設計與表單業務邏輯的設計、信號與槽的特點和使用等。第二部分介紹GUI程式設計中一些主要功能模組的使用,包括基本介面元件、事件處理、資料庫、繪圖、多媒體等。第三部分先介紹使用PyQtChart和PyQtDataVisualization進行二維和三維資料視覺化設計的方法,再介紹將Matplotlib嵌入PyQt5 GUI應用程式視窗介面中進行資料視覺化的程式設計方法。通過研讀本書,讀者可以掌握使用PyQt5、PyQtChart、Matplotlib等模組進行GUI應用程式和資料視覺化設計的方法。 本書適合具有Python程式設計基礎,並想通過Python設計GUI應用程式或在GUI應用程式中實現資料視覺化的讀者閱讀和參考。
王維波
博士,大學教師,從事測控技術與儀器專業相關的工作,主要研究地球物理探測儀器開發、監測資料處理方法和軟體發展。著有《Qt 5.9 C 開發指南》一書。 栗寶鵑 博士,科研人員,主要從事地球物理、水下探測、遙感等專業方向的資料處理和圖像識別方面的研究工作,在日常工作中常使用Qt和Python解決實際問題。 張曉東 博士,大學教師,從事自動化專業相關的教學工作,研究方向主要是優化演算法、最優控制和智慧控制。具有豐富的程式設計經驗,善於通過Qt C 和Python的結合提高演算法效率。
第一部分 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