我寫的第二本書《Python Qt GUI與數據可視化編程》終于上架銷售了。
去年為第一本書《Qt 5.9 C++開發指南》寫的介紹文章稱其為傾心傾力之作。本書與第一本書是有些關聯的,一些內容框架和示例來自于第一本書,但是本書不是簡單地將C++的示例改寫為Python的示例,在寫這本書時發現第一本書中的一些不足,做了很多的改進。我們在寫論文或指導學生寫論文時都知道一個基本的道理:好的論文總是一遍一遍改出來的。這是我寫的第二本書,有了更多的寫書經驗,在內容和結構上更加完善,力求完美,所以稱其為盡善盡美之作。
怎樣才能算得上是盡善盡美之作呢?本人在大學里從事教學工作,看多了學生的報告和畢業論文,翻一遍基本上就能看出來哪篇是好的論文,哪篇是差的論文。好的論文結構清晰,內容充實而條理清楚,該具體的地方能詳細介紹,該粗略的地方絕不多占篇幅,格式美觀,圖文并茂,讓人看了就能看明白,看著就舒服。而差的論文則相反,論文結構不清,邏輯混亂,缺少真材實料,內容注水嚴重,格式也差。
本書就是按照我心目中好論文的標準來寫的,在章節內容選取、內容順序安排、示例設計、原理和程序講解各方面力求完美。總結一下,本書有以下幾個特點。
1. 主題明確,內容選擇緊扣主題
本書的主題是使用PyQt5進行GUI應用程序設計,以及嵌入到GUI界面的數據可視化編程。這個主題是非常實用的,因為我們經常需要將自己編寫的Python程序封裝成一個GUI程序,以便進行展示和交互式的操作。而Python自帶的tkinter雖然可以做GUI界面,但是功能比較差,Matplotlib是常用的數據可視化工具,但是一般介紹Matplotlib的書只介紹其腳本化的編程方法,將其當做類似于MATLAB中的plot繪圖工具在使用。
PyQt5是Qt5 C++類庫的Python綁定,使用PyQt5可以在Python中開發專業級的GUI程序。我們已經出版了一本《Qt 5.9 C++開發指南》,對Qt C++類庫的使用比較熟悉,所以寫這個主題也是合適的。本書圍繞這個主題設置章節內容,首先在內容選擇上追求完美。
(1)本書沒有用一章專門介紹Python編程基礎。研究GUI和數據可視化編程的讀者應該已有一定的Python編程基礎,所以本書沒有必要再介紹Python編程基礎。
(2)有些功能模塊是PyQt5和Python都有的,就只選擇在Python中設計GUI應用程序用得上的PyQt5模塊。例如,Python雖然有自帶的數據庫、多媒體、文件讀寫功能模塊,但是功能不如PyQt5的相應模塊,或不易與PyQt5的GUI程序的窗口界面結合使用,本書就介紹PyQt5的數據庫、多媒體、文件讀寫功能模塊。而Python自帶的多線程編程功能已經比較全,且不涉及用戶界面,本書就不介紹PyQt5的多線程編程功能。Python有很多功能強大的第三方網絡功能模塊,也就沒有必要介紹PyQt5的網絡編程功能了。
(3)在數據可視化部分,本書介紹了PyQtChart和PyQtDataVisualization的使用,這兩個包實際上是Qt C++類庫的一部分,熟悉Qt C++類庫的讀者可以很快上手使用。同時又考慮到Matplotlib使用的廣泛性,增加了Matplotlib嵌入到GUI界面上實現數據可視化編程的內容。
2. 章節內容安排邏輯清晰
本書的內容分為三大部分,各部分和章節分布如圖。
第一部分是PyQt5開發基礎,包括第1章和第2章。
第1章介紹Python、Qt、PyQt5的特點和安裝方法,在Windows 中建立開發環境。
第2章介紹使用PyQt5開發GUI應用程序的基本框架原理,包括GUI應用程序的基本結構,可視化設計UI窗體時開發GUI程序的流程和框架,信號與槽的使用方法,資源文件的使用等。掌握了第2章的內容就掌握了PyQt5開發GUI應用程序的框架性原理,再根據自己的編程需要選擇性地學習第二和第三部分的章節。
第二部分是GUI應用程序設計,從第3章至第11章。
這一部分介紹GUI應用程序設計中常用到的一些功能模塊的編程使用方法,包括常用界面組件的使用,Model/View結構,事件處理,對話框和多窗口設計,數據庫,繪圖,文件讀寫和操作,多媒體,多語言界面和Qt樣式表定制界面等。
第三部分介紹數據可視化設計方法,從第12章至第14章。
PyQtChart和PyQtDataVisualization是Qt C++類庫相應模塊的Python綁定,分別用于二維圖表和三維數據可視化設計,其內容的介紹比較全面。另外由于Matplotlib在Python數據可視化中應用廣泛,第14章專門介紹將Matplotlib嵌入到GUI界面中實現交互式數據可視化的設計方法,包括主要的技術點和一些常用二維圖和三維圖的編程使用方法。
PyQtChart、PyQtDataVisualization與Matplotlib的某些功能是重合的,但兩者各有千秋,讀者可根據自己的需要和熟悉的內容選擇學習和使用。如果讀者熟悉Qt C++類庫中的二維圖表和三維數據可視化模塊的使用,就看第12章和第13章;如果讀者熟悉Matplotlib的使用,就看第14章。
3. 內容講解言簡意賅,詳略得當
技術書籍必須言簡意賅,避免廢話連篇,同時要結合程序或圖表進行必要的講解。在內容的講解上要詳略得當,該簡略的就簡略,該深入的就深入,例如:
(1)本書在第2章介紹過窗體UI的可視化設計原理、代碼構建界面的原理后,在后續章節中就基本不再介紹窗體的可視化設計過程,更不會拿構建界面的代碼來充頁數。界面設計盡量采用可視化方法,GUI程序設計的重點應該放在類的各種接口屬性和函數的使用上,放在業務邏輯功能的實現上。
(2)對于簡單的界面組件的使用,本書不會花太多篇幅來逐一介紹,因為有些組件的常用功能很簡單,甚至是顯而易見的,例如QLabel,QPushButton等。本書第3章介紹界面組件的使用時,通常是將幾個組件放在一個示例里一起介紹,除了簡單介紹其常用方法外,還介紹一些高級方法的使用,例如QTreeWidget的節點關聯數據的使用方法。
(3)對于某些內容本書又會深入地詳細介紹。例如第14章介紹Matplotlib嵌入到GUI界面中的編程方法,本書就介紹的非常詳細,而不是像某本書上只是拿一個官方示例跑一下而已。第14章介紹了Matplotlib嵌入到GUI界面中編程的基本原理,還詳細介紹了Matplotlib繪圖的主要元素的面向對象操作方法、交互式操作方法,還設計了一個自定義繪圖組件類QmyFigureCanvas,可直接在界面可視化設計時使用,可直接應用于用戶自己的程序設計。
圖14-4 示例Demo14_2運行時界面。將Matplotlib的繪圖功能嵌入到GUI程序中,并且對圖的各個組成元素的面向對象編程操作進行了詳細的介紹
4. 以完整示例講解編程方法,提供兩套示例程序
本書延續《Qt 5.9 C++開發指南》一書的風格,以大量完整示例程序為基礎講解編程原理,這些示例分散在各個章節中。本人一貫認為,沒有完整示例的編程書籍就是忽悠人的。只有自己做過一遍示例程序,才可以深入地理解和掌握編程中的一些細節問題,講解也就更加有針對性。學習編程也是一樣,只是拿示例程序跑一遍、看一遍是難以完全掌握的,必須自己動手做一遍才能真正學會。
本書提供兩套示例程序。一套是具有全部源碼的程序,包括Qt項目、UI窗體、Python程序等,其中的Python程序可以直接運行,顯示示例運行結果。
另外一套是只有UI窗體的不完整程序,包括Qt項目、UI窗體、Python程序框架,其中的Python程序文件只有基本框架,沒有功能實現代碼。這套程序是為了便于讀者使用已經設計好的UI窗體,根據書中介紹的過程和內容,在Python程序框架里自己編寫程序,逐步實現功能。這樣的學習過程就具有可操作性。
以下是本書中一些示例的運行界面。
圖3-10 示例Demo3_7運行時界面。使用QAction設計主窗口的菜單欄、工具欄,可視化與代碼結合的界面設計方法,QPlainTextEditor文字編輯功能等
?
圖13-11 示例Demo13_3繪制的三維曲面圖。使用PyQtDataVisualization中的類繪制三維曲面圖
?
圖14-9? 示例Demo14_3運行時界面。Matplotlib繪圖工具欄的改造與交互式操作
后記
我們寫這本書只是因為發現市面上沒有這個主題的好書,覺得有必要寫一本。寫這本書沒有什么項目支持,沒有deadline要求,因而能精耕細作,仔細打磨,希望寫出一本比較完美的書。現在書已正式出版,算不算得上一本好書,就留給讀者和市場,還有時間來檢驗了。
附:三位作者簡介
- 王維波(博主),博士,中國石油大學(華東)教師,從事測控技術與儀器專業相關的教學工作,主要研究地球物理探測儀器開發、監測數據處理方法和軟件開發。精通軟硬件開發,已出版《Qt 5.9 C++開發指南》一書。
- 栗寶鵑,博士,某大型單位科研人員,主要從事地球物理、水下探測、遙感等專業方向的數據處理和圖像識別方面的研究工作,在日常工作中使用Qt和Python解決實際問題。
- 張曉東,博士,中國石油大學(華東)教師,從事自動化專業相關的教學工作,研究方向主要是優化算法、最優控制和智能控制。具有豐富的算法編程經驗,善于通過Qt C++和Python結合提高算法效率。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
