本書既是介紹PyQt5的快速入門書籍,也是介紹PyQt5實戰(zhàn)應(yīng)用的書籍。PyQt5是對Qt所有類的Python封裝,即可以利用Qt的強大功能,也可以利用Python豐富的生態(tài),同時能夠結(jié)合Python簡潔的語法進行操作,其結(jié)果就是使用PyQt5可以高效簡單地開發(fā)出自己想要的程序。本書內(nèi)容豐富,對PyQt5基礎(chǔ)知識的介紹比較全面,同時對新手使用PyQt5的一些重點難點都有專門的章節(jié)進行針對性分析,還重點介紹了如何把Python的一些重量級模塊(Pandas、Matplotlib和Plotly)嵌入到PyQt5中,從而極大地節(jié)約開發(fā)時間。*后,本書會給出一些綜合性較強的實戰(zhàn)案例,幫助讀者快速掌握PyQt5的實戰(zhàn)應(yīng)用?偠灾,本書旨在幫助讀者以*短的時間掌握PyQt5的基礎(chǔ)知識并能夠?qū)崙?zhàn)應(yīng)用,希望本書對有Python程序開發(fā)需求的讀者有幫助。
前 言
Python可以說是世界上最廣泛、最簡單的編程語言之一,Qt可以說是世界上最好的程序開發(fā)庫之一。Python與Qt結(jié)合的產(chǎn)物就是PyQt,因此,PyQt就成了Python中程序開發(fā)最棒的庫之一(當然,筆者認為它在Python程序開發(fā)中就是最棒的)。由于PyQt是Python與Qt的結(jié)合,所以它既可以利用Python強大而又簡潔的語法,又不會丟失Qt強大的功能。從Python的角度來說,凡是Python涉及的所有簡潔、易用性的語法,PyQt都可以使用;凡是Python涉及的所有開源模塊,PyQt也都可以使用。從Qt的角度來說,由于PyQt完成了對Qt的所有類的封裝,因此,從理論上說,使用Qt能開發(fā)出來的東西,使用PyQt也可以開發(fā)出來,因此,PyQt可以利用Qt強大的功能。由于充分利用了雙方的優(yōu)點,所以PyQt在開發(fā)程序的過程中會帶來一些意想不到的收獲,利用Python的簡潔語法與強大而又豐富的生態(tài)圈,有些程序邏輯在Qt中實現(xiàn)會比較復(fù)雜,而在PyQt中卻很簡單,這才是PyQt最大的魅力之處。
近年來PyQt發(fā)展很快,從1998年最初的PyQt 0.1,到PyQt 1、PyQt 2、PyQt 3、PyQt 4以及最新的PyQt 5.9(截至2017年8月9日),并且實現(xiàn)了PyQt與Qt的同步更新。有一點非常遺憾的是,PyQt 5與PyQt 4并不兼容,PyQt 4的代碼無法在PyQt 5中運行。PyQt 5的誕生時間是2013年4月,至今,PyQt 5經(jīng)過了快速發(fā)展,現(xiàn)在已經(jīng)非常成熟,并且Qt開發(fā)團隊已經(jīng)明確宣布從2015年開始就放棄了對Qt 4(對應(yīng)PyQt 4)的支持,因此,對于想要學(xué)習(xí)PyQt的朋友來說,一開始就學(xué)習(xí)PyQt 5是一個最好的選擇。
然而,非常遺憾的是,市面上并沒有一本真正指導(dǎo)新手學(xué)習(xí)PyQt 5的教材,網(wǎng)絡(luò)上針對PyQt 5的學(xué)習(xí)案例的知識結(jié)構(gòu)也都非常零碎,無法形成一個學(xué)習(xí)PyQt 5的系統(tǒng)化框架。因此,對于新手來說,想要快速接受PyQt 5系統(tǒng)性的訓(xùn)練是一件非常困難的事情,筆者最初學(xué)習(xí)PyQt 5的時候也吃盡了苦頭,查閱了PyQt 5與Qt 5的大量官方文獻資料,并結(jié)合幾年的實戰(zhàn)應(yīng)用之后,才可以說有一些水平。
編程是一個熟能生巧的活兒,目前PyQt 5的開發(fā)技術(shù)算是掌握一些了,但是如果未來不使用這項技術(shù),那么再過幾年說不定就完全忘記PyQt 5是如何使用的了,如果是這樣的話就會給自己留下一些遺憾?紤]到現(xiàn)在個人還有一些額外的時間與精力,考慮到目前市面上還沒有一本關(guān)于PyQt 5使用的教材,于是本書應(yīng)運而生。
寫書是一項神圣而又艱辛的工作,在本書的創(chuàng)作期間,為了讓本書包含更多的內(nèi)容,同時又讓其變得更容易理解,我和搭檔孫洋洋查閱了大量的PyQt 5官方文獻資料,花費了很大的時間和精力在其中。本書得以順利出版,是無數(shù)個日日夜夜調(diào)試和寫作的成果。寫作本書時總會遇到一些復(fù)雜的PyQt 5技術(shù)問題,我和搭檔孫洋洋常常連續(xù)幾天熬夜討論,在每一個細節(jié)上反復(fù)推敲,每當攻克技術(shù)難點的時候,我們都感到無比快樂。我要特別感謝搭檔孫洋洋,沒有你的堅持和鼓勵,就不會寫出這么精彩的書籍,感謝你那較真的性格,謝謝你。
經(jīng)過近一年的不懈付出,這本介紹PyQt 5的書終于出版了,希望這本書可以幫助更多的朋友掌握PyQt 5技術(shù),少走些技術(shù)彎路。同時這本書能夠按時出版,我感到無比欣慰,無論近一年吃了多少苦、犧牲了多少時間都是值得的。
本書結(jié)構(gòu)
本書共有11章,基本包含了筆者在使用PyQt的過程中遇到的絕大多數(shù)技術(shù)及一些經(jīng)典的應(yīng)用。書中有些章節(jié)是具有獨立性的,讀者可以針對自己的實際情況選擇閱讀。
第1章介紹PyQt的入門知識,講述PyQt的安裝配置,以及Eric 6這個IDE的簡單使用方法。已經(jīng)有一定PyQt基礎(chǔ)的朋友可以略去這一章。
第2章簡單介紹Python的基本語法。本章內(nèi)容針對一些沒有接觸過Python的讀者,已經(jīng)有一些Python基礎(chǔ)的朋友可以略去這一章。
第3章介紹Qt Designer的使用方法。Qt Designer是一個PyQt的可視化界面編輯程序,它的作用是幫助用戶快速開發(fā)出界面文件,我們可以通過其他方式把界面文件轉(zhuǎn)換成Python代碼文件。對于不懂太多PyQt知識的讀者來說,本章內(nèi)容可以讓你快速入門;同時,本章也是讓你的PyQt技術(shù)快速進步的最重要章節(jié)。
第4章介紹PyQt 5的基本窗口控件的使用方法。如果讀者的時間并不充裕,只對部分控件感興趣,則可以選擇相應(yīng)的小節(jié)閱讀。
第5章介紹PyQt 5的高級界面控件的使用方法。如果讀者對PyQt的表格、樹、容器(多窗口控件)、多線程等感興趣,則可以選擇相應(yīng)的小節(jié)閱讀。
第6章介紹PyQt 5的布局管理(在第3章中闡述Qt Designer的使用方法時已經(jīng)做了介紹,當時是通過Qt Designer這個代碼生成器進行介紹的,而這里通過手工輸入代碼的方法進行介紹)。由于布局管理非常重要,值得我們用單獨一章來介紹。如果讀者對用純代碼實現(xiàn)布局管理器感興趣,則可以參考這一章;如果對用代碼生成器Qt Designer實現(xiàn)布局管理器感興趣,則可以忽略這個章節(jié)。實際上,這兩種方法并沒有本質(zhì)的區(qū)別。
第7章介紹PyQt 5信號與槽的應(yīng)用。信號與槽是PyQt的核心,想要掌握PyQt的高級玩法,則可以仔細閱讀這個章節(jié)。
第8章介紹PyQt 5的圖形和特效。本章內(nèi)容適用于有PyQt繪圖、美化窗口需求的讀者。
第9章介紹PyQt 5的擴展應(yīng)用。如果你想知道如何把Python的一些非常流行的模塊如PyInstaller、Pandas、Matplotlib、PyQtGraph、Plotly等與PyQt結(jié)合,則可以選擇性閱讀這個章節(jié)。
第10章通過幾個例子介紹PyQt 5的實戰(zhàn)應(yīng)用。想要了解一些簡單的程序是如何開發(fā)的朋友,則可以選擇性閱讀這個章節(jié)。
第11章介紹PyQt 5在金融領(lǐng)域的應(yīng)用,這是本書作者孫洋洋在金融公司工作期間積累的一些實戰(zhàn)性較高的案例,展示如何將PyQt 5應(yīng)用到投資研究系統(tǒng)、量化投資以及金融工具開發(fā)中,讀者可以根據(jù)自己的需求選擇性閱讀。
本書附贈內(nèi)容
附錄A:PyQt 5整體結(jié)構(gòu)
附錄B:Python開發(fā)技巧與實踐
附錄C:Python在線學(xué)習(xí)資料
附贈內(nèi)容保存在github上,網(wǎng)址是:https://github.com/cxinping/PyQt5,讀者可自行下載。祝讀者學(xué)習(xí)順利、事業(yè)有成。
本書讀者
本書適合具有 Python 基礎(chǔ)的讀者,通過本書可熟悉 Python 基礎(chǔ)知識并加深鞏固。本書結(jié)構(gòu)合理,內(nèi)容翔實,適合對Python、Qt和PyQt編程感興趣的科教人員和廣大的計算機編程愛好者閱讀,也可作為相關(guān)機構(gòu)的培訓(xùn)教材。
致謝
首先,我要感謝我的父親。在我上大學(xué)期間由于家庭變故,我的父親王貴誠生病去世了,這對我打擊很大。我一直很內(nèi)疚,在他走之前,沒能見上他最后一面。在最后一次談話中,他要求我做一個對社會有用的人,實現(xiàn)自己的最大價值,盡自己的所能無私地幫助別人。如果時間可以倒流,我渴望給父親一個擁抱,對他說:我明白,一代人做一代事。作為其子,我愿意為您分憂。父親教會我人生的意義,讓我懂得人活著就要做有意義的事情,快樂地過每一天。我愛我的父親,我愛這個家。謝謝父親這些年的細心教導(dǎo),讓我懂得生活的意義。謝謝您,我的父親。
其次,我要感謝我的叔叔王輝和嬸嬸一家,我的叔叔是我的偶像,也是我做人做事的榜樣。他教會我作為一個匠人,應(yīng)該有的尊嚴和驕傲,他在我最困難的時候給予我無私的幫助,鼓勵我追尋心中的夢想。他經(jīng)常跟我說,一生之計在于勤,一天之計在于晨,剛開始我覺得道理淺顯易懂,后來隨著年齡的增長、社會閱歷的增多,才逐漸明白,一個人只有付出不亞于任何人的努力,在自己的領(lǐng)域一直努力鉆研,鍥而不舍,才能成功。這個道理很淺顯易懂,當時年幼不覺得如何有用,直至今日,方才明白是至理名言。
本書的出版要特別感謝電子工業(yè)出版社的黃愛萍和葛娜,感謝她們在選題策劃和稿件整理方面做出的大量工作。
同時,在本書創(chuàng)作過程中,感謝編委會的全體成員,提出很多寶貴的意見。感謝編委會的邢夢來,犧牲了大量的業(yè)余時間,積極和作者討論寫書細節(jié),校對了全部課件程序,對每個程序都做了中文注解。
感謝兄長徐楠光,教會我用感恩的心去工作,積極主動地面對困難,讓我對擁有的一切心懷感激。
感謝我的母親徐素萍,感謝我的妻子李蕾,感謝你們在我寫書的時候給我提出的建議,鼓勵我寫成此書。感謝母親多年來含辛茹苦的培養(yǎng),您對我的默默支持,是我積極向上的精神動力。
感謝我的好兄弟王祥平,在本書的出版過程中提出了很多寶貴的意見。在我心力交瘁時,鼓勵我永不放棄,在科大學(xué)習(xí)期間是我一生中最快樂的日子。
感謝我的師傅張云河,您是我做人做事的榜樣。感謝您教會我寶貴的專業(yè)知識,在我最落魄的時候給予我巨大的幫助,讓我有能力去實現(xiàn)自己的夢想。我將繼續(xù)追隨您,為夢想而努力。
感謝潭州教育的眾位老師,IOS學(xué)院的院長Dream老師,Python學(xué)院的院長強子老師,Android學(xué)院的院長Hank老師,教會我專業(yè)的技術(shù),使我的技術(shù)突飛猛進,還鼓勵我要為社會做出更多的貢獻,實現(xiàn)自己的人生價值。
感謝羅曦、張劍、陳曉楠三位同學(xué),為本書的編寫提供了大量支持。
感謝洛基英語(Rocky English)的韓宏術(shù)老師、查理老師和劉安樂老師,使我的英語水平得到提高,讓我掌握了地道、流利、準確的英語發(fā)音,可以無障礙地閱讀英文技術(shù)文檔。給予我信心,幫助我建立人生的目標和夢想。
最后,特別感謝克亞營銷的劉克亞老師,拜讀您寫的《超高價營銷》時,經(jīng)常激動得徹夜難眠,書中的每個觀點都讓我興奮不已,一二三成功模式更是堅定我寫本書的原因,您教導(dǎo)我要先無私地給予別人,幫助別人成功,然后自己才能成功,推崇共贏而不是競爭。作為您的學(xué)生受益良多,您提出的克亞營銷鐵律,教會我如何實現(xiàn)自我價值。