大數據資料可視化:Python QT GUI程式設計 | 被動收入的投資秘訣 - 2024年8月
![](https://www.books.com.tw/img/001/084/87/0010848799.jpg)
大數據資料可視化:Python QT GUI程式設計
人工智慧,大數據操作的後端,需要一個讓使用者能操作的前端介面。應用程式前端介面的選擇,除了Web、App、命令列之外,還有已存在30年的視窗程式。在大型專案開發中,雖然網頁已成為主流,但許多場合,還是有視窗程式的需求。
開發視窗程式首選當然是Visual Studio,但必須熟悉C++/C#。如果讀者已經熟悉了Python,又想開發視窗程式,Qt將會是最好的選擇。讀者只要會Python就可以了。
Qt C++ 類別庫是一套廣泛使用的跨平台GUI 設計類別庫,PyQt5 是Qt5 C++類別庫的Python 綁定,使用PyQt5 在Python 裡程式設計,可以將Python 豐富的科學計算、圖形顯示等功能與PyQt5 的GUI 設計功能結合起來,開發出比較專業的Python GUI 應用程式,便於對研究成果進行有效的整合與展示。
本書介紹在Python 中使用PyQt5、PyQtChart、Matplotlib 等進行GUI 應用程式設計和資料視覺化程式設計的方法,用最真實範例的方式,讓讀者熟悉Qt的開發方式,並且掌控所有視窗的元件,全書內容分為三部分。包括:
►完整Python、Qt開發環境的安裝
► PyQt5程式設計架構
►常用視窗元件使用,MV架構、GUI的增強設計
►滑鼠鍵盤等事件的處理、對話方塊及多視窗的應用
►資料庫的使用,使用了SQLITE
►PyQt5上的檔案操作、繪圖元件
►PyQt5多媒體的操作,包括音樂及視訊
►PyQtChart的圖表製作、PyQtDataVisualization的使用
►最強大的人工智慧統計繪圖套件Matplotlib的使用
本書特色
◎ 使用PyQt5 進行GUI 應用程式設計
◎ 使用PyQtChart、PyQtDataVisualization 和Matplotlib 在GUI 程式的視窗介面上嵌入資料視覺化功能。
適合讀者群:具Python程式設計基礎、想透過Python設計GUI應用程式,
或在GUI應用程式中實現資料視覺化的讀者。
作者簡介
王維波
博士,大學教師。
從事測控技術與儀器專業相關工作,主要研究地球物理探測儀器開發、監測資料處理方法和軟體發展。
栗寶鵑
博士,科研人員。
主要從事地球物理、水下探測、遙感等專業方向的資料處理和圖像識別方面的研究工作,在日常工作中常使用Qt和Python解決實際問題。
張曉東
博士,大學教師。
從事自動化相關的教學工作,研究方向主要是優化演算法、最優控制和智慧控制。具有豐富的程式設計經驗,善於透過Qt C 和Python的結合提高演算法效率。
前言
第一篇 PyQt5 開發基礎
01 | 開發環境安裝
1.1 Python
1.2 Qt
1.3 PyQt5
| 02 | PyQt5 GUI 程式架構
2.1 PyQt5 GUI 程式的基本架構
2.2 使用視覺化設計表單的GUI程式
2.3 訊號與槽的使用
2.4 自訂訊號的使用
2.5 資源檔的使用
2.6 從Qt C++ 類別庫到PyQt5
2.7 3個單表單GUI 專案範本
第二篇 GUI 應用程式設計
| 03 | 常用介面元件的使用
3.1 資料登錄輸出
3.2 QPushButton
3.3 QSlider 和QProgressBar
3.4 日期時間資料
3.5 計時器QTimer
3.6 下拉式選單QComboBox
3.7 QMainWindow 與QAction
3.8 QListWidget 和QToolButton
3.9 QTreeWidget 和QDockWidget
3.10 QTableWidget
3.11 容器類別元件與版面配置設計
| 04 | Model/View 結構
4.1 Model/View 結構
4.2 QFileSystemModel
4.3 QStringListModel
4.4 QStandardItemModel
4.5 自訂代理
| 05 | 事件處理
5.1 預設事件處理
5.2 事件攔截與事件過濾
5.3 拖放事件與拖放操作
5.4 具有拖放操作功能的元件
| 06 | 對話方塊與多視窗設計
6.1 標準對話方塊
6.2 自訂對話方塊及其使用
6.3 多視窗應用程式
6.4 MDI 應用程式設計
| 07 | 資料庫
7.1 Qt SQL 模組概述
7.2 QSqlTableModel 的使用
7.3 QSqlQueryModel 的使用
7.4 QSqlQuery 的使用
7.5 QSqlRelationalTableModel 的使用
| 08 | 繪圖
8.1 QPainter 繪圖
8.2 座標系統和座標轉換
8.3 自訂介面元件
8.4 Graphics View 繪圖架構
| 09 | 檔案
9.1 檔案操作相關類別概述
9.2 文字檔讀寫
9.3 二進位檔案讀寫
9.4 目錄和檔案操作
| 10 | 多媒體
10.1 PyQt5 多媒體模組功能概述
10.2 音訊播放
10.3 音訊輸入
10.4 視訊播放
10.5 攝影機的使用
| 11 | GUI 設計增強技術
11.1 多語言介面
11.2 QSS 訂製介面
第三篇 資料視覺化
| 12 | PyQtChart 二維繪圖
12.1 PyQtChart 概述
12.2 QChart 繪製聚合線圖
12.3 QChart 繪圖進階功能
12.4 對數座標軸和多座標軸
12.5 圓形圖和各種柱狀圖
12.6 蠟燭圖和日期時間座標軸
12.7 區域填滿圖
12.8 極座標圖
| 13 | PyQtDataVisualization 3D 繪圖
13.1 PyQtDataVisualization 模組概述
13.2 3D 柱狀圖
13.3 3D 散點圖
13.4 立體曲面圖
| 14 | Matplotlib 資料視覺化
14.1 Matplotlib 的基本用法
14.2 圖的主要元素的物件導向操作
14.3 互動操作
14.4 典型二維圖的繪製
14.5 3D 資料繪圖
前言
Python 作為一個開放原始碼的直譯型程式設計軟體,在教學、科學研究、實際專案中用得越來越多。Python 易學好用,程式資源豐富,在程式設計解決一些科學計算問題時比較實用,但是Python 附帶的Tkinter 套件設計GUI 程式的功能比較弱,無法設計專業的GUI 應用程式。
Qt C++ 類別庫是一套廣泛使用的跨平台GUI 設計類別庫,PyQt5 是Qt5 C++類別庫的Python 綁定,使用PyQt5 在Python 裡程式設計,可以將Python 豐富的科學計算、圖形顯示等功能與PyQt5 的GUI 設計功能結合起來,開發出比較專業的Python GUI 應用程式,便於對研究成果進行有效的整合與展示。
目前,介紹Python 程式設計的書很多,但是專門介紹PyQt5 GUI 程式設計的書很少。本書介紹兩個主題:一個是使用PyQt5 進行GUI 應用程式設計,另一個是使用PyQtChart、PyQtDataVisualization 和Matplotlib 在GUI 程式的視窗介面上嵌入資料視覺化功能。這兩個主題都是非常實用的,可以將研究成果整合為一個GUI 應用程式,進行互動式操作和結果展示。
☘ 本書內容
本書介紹在Python 中使用PyQt5、PyQtChart、Matplotlib 等進行GUI 應用程式設計和資料視覺化程式設計的方法,全書的內容分為三部分。
第一部分是PyQt5 開發基礎,包含第1 章和第2 章。
第1 章介紹Python、Qt、PyQt5 的特點和安裝方法,在Windows 中建立開發環境。
第2 章介紹使用PyQt5 開發GUI 應用程式的基本架構原理,包含GUI 應用程式的基本結構、使用視覺化設計UI 表單時開發GUI 程式的流程和架構、訊號與槽的使用方法等。掌握了第2 章的內容就掌握了PyQt5 開發GUI 應用程式的架構性原理,再學習第二部分和第三部分就很容易了。
第二部分是GUI 應用程式設計,從第3 章至第11 章。
這部分介紹GUI 應用程式設計中常用的一些功能模組的程式設計使用方法,包含常用介面元件的使用、Model/View 結構、事件處理、對話方塊和多視窗設計、資料庫、繪圖、檔案讀寫和操作、多媒體、多語言介面和Qt 樣式表訂製介面等。
這部分的內容根據PyQt5 和Python 各自的特點做了取捨,整體的原則就是對GUI 程式設計中必需的,而Python 中沒有或功能不強的模組介紹。舉例來說,Python 雖然有附帶的資料庫、多媒體、檔案讀寫功能模組,但是功能不如PyQt5 的對應模組,或不易與PyQt5 的GUI 程式的視窗介面結合使用,因此本書就介紹PyQt5 的資料庫、多媒體、檔案讀寫功能模組。而Python 附帶的多執行緒程式設計功能已經比較全,且不涉及使用者介面,因此本書就不介紹PyQt5 的多執行緒程式設計功能。Python 有很多功能強大的協力廠商網路功能模組,因此沒有必要介紹PyQt5 的網路程式設計功能。
第三部分是資料視覺化程式設計,從第12 章至第14 章。
Chart 和Data Visualization 模組是Qt C++ 類別庫的一部分, 分別用於二維圖表繪製和3D 資料視覺化,但是PyQt5 中沒有這兩個模組,需要單獨安裝PyQtChart 套件和PyQtDataVisualization 套件。第 12 章介紹使用PyQtChart 模組繪製各種二維圖表的程式設計方法,第13 章介紹使用PyQtDataVisualization模組繪製3D 柱狀圖、3D 散點圖和立體曲面圖的程式設計方法。
Matplotlib 是Python 中應用最廣泛的資料視覺化模組,但是一般介紹Matplotlib 資料視覺化的書很少詳細介紹將Matplotlib 嵌入GUI 視窗上的程式設計方法。第14 章專門介紹Matplotlib 與PyQt5 結合,嵌入GUI 程式中實現資料視覺化的程式設計方法,這是在撰寫整合化的Python GUI 應用程式時經常遇到的,是非常實用的功能。
☘ 本書學習路線
本書使用的程式語言是Python,但是本書並不會介紹Python 語言基礎,需要讀者對Python 程式設計有一定的了解,特別是對Python 的物件導向程式設計原理要比較熟悉。如果讀者對Python 不夠熟悉,需要參考專門介紹Python 程式設計基礎的書,學會Python 後再來學習本書。
本書的內容雖然用到Qt 的IDE,即Qt Creator,但是並不需要撰寫任何C++語言程式,所以讀者無須具有C++ 語言基礎。當然,如果讀者有C++ 語言基礎,或對Qt C++ 程式設計比較熟悉,對閱讀本書的內容是非常有幫助的。
學習本書應從第一部分開始。第1 章介紹本書用到的各個軟體及其安裝,架設開發環境。第2 章是本書的基礎和重點內容,介紹了PyQt5 GUI 應用程式的基本程式架構、以UI 表單視覺化設計為基礎的GUI 應用程式的設計流程和工具軟體pyuic5 的使用、UI 與表單業務邏輯分離設計的原理、Qt 的核心技術訊號與槽的使用方法、Qt Creator 中管理和使用資源檔,以及透過工具軟體pyrcc5將資源檔轉為Python 程式的方法。第2 章還建立了3 個單視窗專案範本,本書的大部分範例都是以這幾個專案範本建立為基礎的。
掌握第2 章的內容就掌握了用PyQt5 設計GUI 程式的技術架構,剩下的就是PyQt5 中用於GUI 應用程式設計的各種類的使用了。
第二部分介紹PyQt5 GUI 程式設計中各個技術模組的使用方法,包含常用介面元件、Model/View 結構、事件處理、對話方塊與多視窗設計、資料庫、繪圖、檔案、多媒體等,讀者可以根據自己的需要學習或查閱對應章節。第11章有兩個新的技術點不在第2 章介紹的技術架構內,分別是多語言介面設計方法和Qt 樣式表訂製介面方法。
第三部分介紹資料視覺化設計方法。PyQtChart 和PyQtDataVisualization 是QtC++ 類別庫對應模組的Python 綁定,分別用於二維圖表和3D 資料視覺化設計,其內容的介紹比較全面。另外由於Matplotlib 在Python 資料視覺化中應用廣泛,第14 章專門介紹將Matplotlib 嵌入GUI 表單上實現互動式資料視覺化的設計方法,包含主要的技術點和一些常用二維圖和3D 圖的程式設計使用方法。
PyQtChart、PyQtDataVisualization 與Matplotlib 的某些功能是重合的,但它們各有千秋,讀者可根據自己的需要和熟悉的內容選擇學習和使用。如果讀者熟悉Qt C++ 類別庫中的二維圖表和3D 資料視覺化模組的使用,就參閱第12 章和第13 章;如果讀者熟悉Matplotlib 的使用,就參閱第14 章。
☘ 範例來源程式
本書的範例程式都是在64 位元Windows 7 系統裡開發和測試的。在開始撰寫本書時使用的是Qt 5.11 和PyQt 5.11,完成本書初稿時已經發佈了Qt 5.12 和PyQt 5.12,由於Qt 5.12 是一個LTS(Long Term Supported)版本,於是又用Qt 5.12 和PyQt 5.12 對全書內容和程式進行了檢查、修改和測試。
本書使用的各個軟體或Python 套件的版本分別是Python 3.7.0、Qt 5.12.0、PyQt 5.12、PyQtChart 5.12、PyQtDataVisualization 5.12、Matplotlib 3.0.0。
讀者在拿到本書進行閱讀和學習時,這些軟體一定已經有更新的發佈版本了。讀者在建置開發環境時使用最新的軟體版本即可,不必與本書使用的軟體版本完全一致,因為這些軟體在大的版本序列裡基本上是向下相容的。
本書提供所有範例來源程式的下載,讀者可到本公司官網搜索到本書後,根據提示(請輸入DM2006)下載本書的範例程式資源。本書提供兩套範例來源程式,使用目的不同。
一套是具有全部原始程式的程式,包含Qt 專案、UI 表單、Python 程式等,其中Python 主程式可以直接執行,顯示範例執行結果。讀者可以使用這套來源程式測試和檢視範例執行結果,並檢視已設計好的UI 表單和Python 程式檔案。
另外一套是只有UI 表單的不完整程式,包含Qt 專案、UI 表單、Python 程式架構,其中的Python 程式檔案只有基本架構,沒有功能實現程式。這套程式是為了便於讀者使用已經設計好的UI 表單,根據書上介紹的內容和過程,在Python 程式架構裡自己撰寫程式,逐步實現功能。之所以保留UI 表單,是因為UI 表單的視覺化設計是個比較耗時間的過程,讀者如果自己從頭開始設計UI 表單,難以保障所有元件的名稱和屬性與範例的一致,在Python 程式設計實現業務功能時容易出現問題。
作者一貫認為UI 表單的視覺化設計不是學習程式設計的重點,表單介面的建立能用視覺化設計解決的就不要用程式。一般情況下,做過幾個範例後很快就可以掌握UI 表單視覺化設計的方法,所以,學習程式設計的重點是各種介面元件和功能類別的介面函數、訊號的靈活使用,以實現程式的業務邏輯功能。
☘ 本書約定
本書撰寫和執行Python 程式使用Python 3.7 附帶的軟體IDLE,對於Python 程式有以下的約定。
Tab 縮排使用3 個空格。因為Python 來源程式是採用縮排確定程式碼片段的,排版時為減少縮排空格數,本書設定Tab 為3 個空格。
程式碼片段的縮排只用相對縮排。在文中一個程式碼片段內的程式使用相對縮排,而非整個程式檔案內的縮排。