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

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