Qt 6 for Python:PySide6 GUI應用開發指南
王維波 栗寶鵑 石翔 周學武
商品描述
Qt 6是使用非常廣泛的專業GUI應用開發框架,而Qt 6 for Python(PySide6)是Qt官方發布的Qt 6的Python綁定,本書介紹如何在Python中使用PySide6開發GUI應用。
本書首先介紹開發環境的安裝和基本配置,以及使用PySide6開發GUI應用的設計原理,包括應用程序基本結構、項目文件組成和各文件的功能、窗口UI可視化設計與窗口業務邏輯類設計、信號與槽的特點和使用等。然後介紹GUI應用程序設計中一些主要功能模塊的使用,包括常用界面組件、模型/視圖結構、事件處理、對話框與多窗口應用設計、文件操作和文件讀寫、數據庫、繪圖、二維圖表、三維數據可視化、多媒體等。最後介紹GUI應用開發中其他工具軟件和技術的應用,包括多語言界面、QSS定制界面和PySide6應用程序的發布。
本書使用Visual Studio Code作為主要開發工具,可以幫助讀者系統掌握用Python開發GUI應用的技術。本書適合具有Python編程基礎,並希望使用Python開發專業級GUI應用的讀者閱讀和參考。
作者簡介
王維波,博士,中國石油大學(華東)教師,從事嵌入式系統開發、儀器設計的教學和科研工作。近年來已出版多部著作,均取得良好的銷量和口碑,包括《Python Qt GUI與數據可視化編程》《STM32Cube高效開發教程》《Qt 6 C++開發指南》。
栗寶鵑,博士,中水北方勘測設計研究有限責任公司高級工程師,主要從事工程勘察與地球物理探測中的數據處理、解譯及成像研究工作。
石翔,博士,中國石油大學(華東)教師,主要研究方向為智能結構與振動控制,長期致力於拉索、橋梁及車輛懸架系統的減振技術研究,在結構主動與半主動控制方面具有紮實的理論基礎,並具備豐富的嵌入式系統開發與智能控制應用經驗。
周學武,碩士,中水北方勘測設計研究有限責任公司高級工程師,主要從事企業數字化轉型研究與開發管理、數字化業務平臺建設和數據治理工作。
目錄大綱
第1章 開發環境準備 1
1.1 Python和Qt簡介 1
1.1.1 Python和GUI應用開發 1
1.1.2 Qt簡介 2
1.1.3 Qt的Python綁定 2
1.1.4 本書開發環境使用的軟件和包 3
1.2 Python環境配置 3
1.2.1 下載和安裝Python 3
1.2.2 Python自帶的IDE——IDLE 4
1.3 PySide6的安裝與卸載 5
1.3.1 安裝PySide6 5
1.3.2 PySide6安裝後得到的工具軟件 6
1.3.3 卸載PySide6 7
1.4 Visual Studio Code安裝與Qt for Python設置 7
1.4.1 安裝VS Code 7
1.4.2 VS Code的基本使用 7
1.4.3 安裝Qt for Python擴展 10
1.4.4 設置Python擴展 11
1.4.5 設置Qt for Python擴展 11
1.5 Qt安裝與Qt開發套件 14
1.5.1 安裝Qt 15
1.5.2 Qt Creator中的開發套件 17
第2章 GUI應用設計原理 19
2.1 GUI應用的基本原理 19
2.1.1 創建一個GUI應用 19
2.1.2 GUI應用的基本程序框架 21
2.1.3 在窗口中顯示文字 22
2.2 使用UI文件的GUI應用設計 24
2.2.1 創建一個帶窗口UI的GUI應用 24
2.2.2 Qt Designer的基本使用 24
2.2.3 項目文件組成與程序原理 26
2.2.4 訪問界面中的組件 31
2.3 信號與槽 32
2.3.1 窗口UI可視化設計 32
2.3.2 界面組件布局管理 34
2.3.3 可視化設計信號與槽的連接 37
2.3.4 為組件的信號設計和連接槽函數 38
2.3.5 為應用設置圖標 42
2.4 設計和使用自定義信號 42
2.4.1 在VS Code中運行前文中的示例 42
2.4.2 編寫一個使用自定義信號的類 43
2.4.3 設計窗口UI 44
2.4.4 創建窗口業務邏輯類 46
2.4.5 信號與槽的特點 48
2.5 Qt Creator和VS Code組合開發Python GUI應用的方法 48
2.5.1 為什麼要組合使用Qt Creator和VS Code 48
2.5.2 在Qt Creator中進行UI設計 49
2.5.3 在VS Code中編寫Python程序 50
2.5.4 兩個單窗口GUI項目模板 54
2.6 從Qt C++類庫到PySide6 57
2.6.1 幫助信息的查找 57
2.6.2 正確導入模塊中的類 59
2.6.3 數據類型對應關系 60
2.6.4 部分類的接口函數的差異 62
第3章 常用界面組件的使用 63
3.1 界面組件概述 63
3.1.1 常用的界面組件 63
3.1.2 QWidget類的主要屬性和接口函數 67
3.2 布局管理 71
3.2.1 布局管理相關的類 71
3.2.2 布局可視化設計及其代碼原理 72
3.3 QLineEdit類的使用 76
3.3.1 QLineEdit類接口概述 76
3.3.2 輸入掩碼 78
3.3.3 驗證器 79
3.3.4 示例 83
3.4 常用的按鈕組件 87
3.4.1 各按鈕類的接口詳解 88
3.4.2 示例 89
3.5 QSpinBox類和QDoubleSpinBox類的使用 93
3.5.1 QSpinBox類和QDoubleSpinBox類接口概述 93
3.5.2 示例 94
3.6 滑動型數值輸入和顯示組件 96
3.6.1 各組件類的主要接口 96
3.6.2 示例 98
3.7 日期時間數據 99
3.7.1 表示日期時間數據的類 100
3.7.2 編輯日期時間數據的界面組件 104
3.7.3 示例 105
3.8 定時器和計時器 106
3.8.1 QTimer類 107
3.8.2 QElapsedTimer類 108
3.8.3 示例 108
3.9 QComboBox類的使用 111
3.9.1 QComboBox類接口概述 112
3.9.2 示例 114
3.10 基於QMainWindow類窗口的應用設計 116
3.10.1 QMainWindow類 117
3.10.2 UI可視化設計 119
3.10.3 QAction類 122
3.10.4 QToolBar類 124
3.10.5 QStatusBar類 124
3.10.6 混合式UI設計 125
3.10.7 QPlainTextEdit組件的使用 127
3.11 QToolButton類和QListWidget類的使用 130
3.11.1 UI可視化設計 130
3.11.2 QToolButton與界面補充創建 133
3.11.3 QList Widget類的接口及操作 135
3.11.4 創建快捷菜單 140
3.12 QTabWidget類的使用 141
3.12.1 QTabWidget類接口概述 142
3.12.2 UI可視化設計 144
3.12.3 示例功能實現 145
3.13 QDockWidget類的使用 148
3.13.1 QDockWidget類 149
3.13.2 QMainWindow中與停靠組件相關的接口 151
3.13.3 示例窗體UI可視化設計 153
3.13.4 示例功能實現 154
3.14 QTreeWidget類的使用 158
3.14.1 UI可視化設計 159
3.14.2 QTreeWidget類 161
3.14.3 QTreeWidgetItem類 164
3.14.4 示例中QTreeWidget組件的操作 166
3.14.5 用QLabel組件顯示圖片 172
3.14.6 示例中QDockWidget組件的操作 173
3.15 QTableWidget類的使用 174
3.15.1 QTableWidget類 174
3.15.2 QTableWidgetItem類 177
3.15.3 示例窗體UI可視化設計 178
3.15.4 示例功能實現 178
第4章 模型/視圖結構 187
4.1 模型/視圖結構概述 187
4.1.1 模型/視圖基本原理 187
4.1.2 模型 188
4.1.3 視圖 189
4.1.4 代理 189
4.1.5 模型/視圖結構的相關概念 189
4.1.6 QAbstractItemModel類 191
4.1.7 QAbstractItemView類 193
4.2 QStringListModel類和QListView類的使用 195
4.2.1 QStringListModel類 196
4.2.2 QListView類 196
4.2.3 示例功能實現 198
4.3 QStandardItemModel類和QTableView類的使用 201
4.3.1 QTableView類 201
4.3.2 QStandardItemModel類 203
4.3.3 QStandardItem類 205
4.3.4 QItemSelectionModel類 207
4.3.5 UI可視化設計 208
4.3.6 示例功能實現 209
4.4 自定義代理 215
4.4.1 自定義代理的功能 215
4.4.2 QStyledItemDelegate類 216
4.4.3 設計自定義代理類 217
4.4.4 使用自定義代理類 219
4.5 QFileSystemModel類和QTreeView類的使用 220
4.5.1 QFileSystemModel類 220
4.5.2 QTreeView類 222
4.5.3 示例功能實現 224
第5章 事件處理 227
5.1 Qt的事件系統 227
5.1.1 事件的產生和派發 227
5.1.2 事件類和事件類型 229
5.1.3 事件的處理 231
5.1.4 典型事件處理示例 232
5.2 事件與信號 236
5.2.1 QWidget.event()函數的作用 236
5.2.2 事件與信號編程示例 236
5.3 事件過濾器 238
5.3.1 事件過濾器的工作原理 239
5.3.2 事件過濾器編程示例 239
5.4 拖放事件與拖放操作 240
5.4.1 拖放操作相關事件 241
5.4.2 外部文件拖放操作示例 241
5.5 具有拖放操作功能的組件 244
5.5.1 示例功能概述 245
5.5.2 窗口初始化 245
5.5.3 拖放操作屬性的顯示 246
5.5.4 拖放操作屬性的設置 248
5.5.5 通過事件過濾器實現項的刪除 249
第6章 對話框與多窗口應用設計 250
6.1 標準對話框 250
6.1.1 QFileDialog對話框 251
6.1.2 QColorDialog對話框 253
6.1.3 QFontDialog對話框 254
6.1.4 QProgressDialog對話框 255
6.1.5 QInputDialog對話框 256
6.1.6 QMessageBox對話框 258
6.2 設計和使用自定義對話框 260
6.2.1 QDialog類 260
6.2.2 自定義對話框設計示例概述 261
6.2.3 主窗口的UI設計與初始化 263
6.2.4 TDialogSize對話框的設計和使用 265
6.2.5 TDialogHeaders對話框的設計和使用 267
6.2.6 TDialogLocate對話框的設計和使用 269
6.3 多窗口應用程序設計 271
6.3.1 窗口類重要特性的設置 272
6.3.2 多窗口應用示例概述 274
6.3.3 主窗口的UI設計和初始化 275
6.3.4 TFormDoc類窗口的設計和使用 276
6.3.5 TFormTable類窗口的設計和使用 279
6.4 MDI應用程序設計 281
6.4.1 QMdiArea類 282
6.4.2 QMdiSubWindow類 284
6.4.3 MDI應用設計示例 285
6.5 Splash窗口與登錄窗口 290
6.5.1 示例功能概述 290
6.5.2 TDialogLogin對話框的設計 290
6.5.3 TDialogLogin對話框的使用 294
第7章 文件操作和文件讀寫 296
7.1 文件操作相關類概述 296
7.1.1 輸入輸出設備類 296
7.1.2 文件讀寫操作類 297
7.1.3 特定格式文件的讀寫 297
7.2 目錄和文件操作 298
7.2.1 示例設計概述 299
7.2.2 QFile類 301
7.2.3 QFileInfo類 303
7.2.4 QDir類 304
7.2.5 QTemporaryDir類 307
7.2.6 QTemporaryFile類 308
7.2.7 QFileSystemWatcher類 309
7.3 讀寫文本文件 311
7.3.1 示例設計概述 312
7.3.2 用QFile類讀寫文本文件 312
7.3.3 用QSaveFile類保存文件 316
7.3.4 將QFile類和QTextStream類結合起來讀寫文本文件 317
7.4 讀寫二進制文件 320
7.4.1 基礎知識和工具軟件 320
7.4.2 QDataStream類 322
7.4.3 Qt預定義編碼方式讀寫文件 324
7.4.4 原始數據方式讀寫文件 333
7.4.5 比較與說明 342
第8章 數據庫 343
8.1 Qt數據庫編程概述 343
8.1.1 Qt SQL模塊 343
8.1.2 SQLite數據庫簡介 345
8.1.3 本章示例數據庫 346
8.2 QSqlTableModel類的使用 347
8.2.1 主要的類 348
8.2.2 示例UI設計和窗口初始化 353
8.2.3 打開數據庫和數據表 353
8.2.4 其他功能的實現 360
8.3 QSqlQueryModel類的使用 364
8.3.1 QSqlQueryModel類 364
8.3.2 使用QSqlQueryModel實現數據查詢 365
8.4 QSqlQuery類的使用 369
8.4.1 QSqlQuery類 369
8.4.2 示例 372
8.5 QSqlRelationalTableModel類的使用 380
8.5.1 數據表之間的關系 380
8.5.2 QSqlRelationalTableModel類的作用 381
8.5.3 QSqlRelationalTableModel類主要接口函數 382
8.5.4 示例設計 383
第9章 繪圖 387
9.1 QPainter繪圖 387
9.1.1 QPainter繪圖系統 387
9.1.2 創建示例 389
9.1.3 QPen類的主要功能 390
9.1.4 QBrush類的主要功能 391
9.1.5 漸變填充 393
9.1.6 QPainter繪制基本圖形 396
9.2 坐標系和坐標變換 400
9.2.1 坐標變換 400
9.2.2 坐標變換繪圖示例 401
9.2.3 視口和窗口 404
9.2.4 繪圖疊加的效果 406
9.3 設計和使用自定義界面組件 407
9.3.1 示例功能概述 407
9.3.2 設計自定義界面組件類TBattery 408
9.3.3 使用自定義界面組件 410
9.4 圖形/視圖架構 411
9.4.1 場景、視圖與圖形項 411
9.4.2 圖形/視圖架構的坐標系 413
9.4.3 圖形/視圖架構相關的類 414
9.4.4 示例 417
9.5 圖像處理和打印 422
9.5.1 圖像表示和圖像處理概述 422
9.5.2 QImage類 424
9.5.3 示例 429
9.5.4 打印功能的實現 434
第10章 二維圖表 439
10.1 Qt Charts模塊概述 439
10.1.1 一個簡單的繪圖程序 439
10.1.2 圖表的主要組成部分 441
10.2 圖表各部分的屬性設置 443
10.2.1 主窗口UI設計 444
10.2.2 QPen對象的屬性設置對話框設計 445
10.2.3 窗口類TMainWindow的初始化 446
10.2.4 圖表各組成部分的屬性設置 449
10.3 圖表交互操作 461
10.3.1 圖表交互操作概述 461
10.3.2 自定義圖表視圖類TChartView 463
10.3.3 主窗口UI設計和初始化 466
10.3.4 交互操作功能的實現 469
10.4 對數坐標軸和多坐標軸 473
10.4.1 示例功能概述 473
10.4.2 主窗口UI設計和初始化 474
10.4.3 載入數據文件並繪制曲線 475
10.5 各種柱狀圖和餅圖 477
10.5.1 主窗口設計和數據準備 478
10.5.2 柱狀圖 480
10.5.3 堆疊柱狀圖 485
10.5.4 百分比柱狀圖 487
10.5.5 餅圖 489
10.6 蠟燭圖和日期時間坐標軸 491
10.6.1 示例功能概述 491
10.6.2 繪制蠟燭圖用到的類 492
10.6.3 窗口UI設計和初始化 493
10.6.4 繪圖功能的實現 495
10.7 面積圖 498
10.7.1 面積圖簡介 499
10.7.2 窗口UI設計與初始化 500
10.7.3 繪圖功能的實現 501
10.8 極坐標圖 504
10.8.1 極坐標圖簡介 504
10.8.2 極坐標圖繪圖示例 505
第11章 三維數據可視化 510
11.1 三維數據可視化簡介 510
11.1.1 Qt Data Visualization模塊簡介 510
11.1.2 Qt Graphs模塊簡介 511
11.1.3 兩個模塊的比較 512
11.2 三維柱狀圖 512
11.2.1 示例功能概述 513
11.2.2 繪制三維柱狀圖 514
11.2.3 其他功能的實現 517
11.3 三維散點圖 524
11.3.1 繪制三維散點圖 524
11.3.2 散點數據管理 527
11.4 三維曲面圖 529
11.4.1 繪制一般的三維曲面圖 529
11.4.2 繪制三維地形圖 534
11.5 三維散點圖——基於Qt Graphs模塊 536
11.5.1 繪制三維散點圖 536
11.5.2 其他功能的實現 538
第12章 多媒體 541
12.1 多媒體模塊功能概述 541
12.2 播放音頻 543
12.2.1 QMediaPlayer類功能概述 543
12.2.2 基於QMediaPlayer類的音樂播放器 544
12.2.3 使用QSoundEffect播放音效文件 550
12.3 錄制音頻 550
12.3.1 QMediaRecorder類功能概述 550
12.3.2 錄制音頻示例 551
12.4 采集和播放原始音頻數據 556
12.4.1 QAudioSource類和QAudioSink類功能概述 556
12.4.2 示例功能概述 559
12.4.3 采集原始音頻數據 559
12.4.4 播放原始音頻數據 565
12.5 播放視頻 566
12.5.1 QMediaPlayer類播放視頻的功能概述 566
12.5.2 在QVideoWidget組件中播放視頻 567
12.5.3 在QGraphicsVideoItem組件中播放視頻 570
12.6 攝像頭的使用 571
12.6.1 攝像頭控制概述 572
12.6.2 示例功能和窗口UI設計 574
12.6.3 主窗口初始化和基本功能實現 575
12.6.4 拍照 579
12.6.5 錄像 580
第13章 其他工具軟件和技術 583
13.1 多語言界面 583
13.1.1 多語言界面設計概述 583
13.1.2 多語言界面設計示例 585
13.2 QSS定制界面 591
13.2.1 QSS的作用 591
13.2.2 QSS句法和規則 593
13.2.3 使用QSS 598
13.3 PySide6應用程序的發布 600
13.3.1 pyside6-deploy.exe功能簡介 600
13.3.2 應用程序發布示例 601

