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