關于我們
書單推薦
新書推薦
|
PyQt5快速開發(fā)與實戰(zhàn)
本書既是介紹PyQt5的快速入門書籍,也是介紹PyQt5實戰(zhàn)應用的書籍。PyQt5是對Qt所有類的Python封裝,即可以利用Qt的強大功能,也可以利用Python豐富的生態(tài),同時能夠結合Python簡潔的語法進行操作,其結果就是使用PyQt5可以高效簡單地開發(fā)出自己想要的程序。本書內容豐富,對PyQt5基礎知識的介紹比較全面,同時對新手使用PyQt5的一些重點難點都有專門的章節(jié)進行針對性分析,還重點介紹了如何把Python的一些重量級模塊(Pandas、Matplotlib和Plotly)嵌入到PyQt5中,從而極大地節(jié)約開發(fā)時間。*后,本書會給出一些綜合性較強的實戰(zhàn)案例,幫助讀者快速掌握PyQt5的實戰(zhàn)應用?偠灾緯荚趲椭x者以*短的時間掌握PyQt5的基礎知識并能夠實戰(zhàn)應用,希望本書對有Python程序開發(fā)需求的讀者有幫助。
《PyQt5快速開發(fā)與實戰(zhàn)》是介紹PyQt 5理論與實戰(zhàn)的前沿書籍,即系統化地介紹Qt的基礎知識,又兼顧Python的各種強大模塊,同時包含豐富的項目實戰(zhàn)。旨在幫助讀者快速掌握PyQt 5的應用知識,是Python程序開發(fā)的利器 前 言 Python可以說是世界上最廣泛、最簡單的編程語言之一,Qt可以說是世界上最好的程序開發(fā)庫之一。Python與Qt結合的產物就是PyQt,因此,PyQt就成了Python中程序開發(fā)最棒的庫之一(當然,筆者認為它在Python程序開發(fā)中就是最棒的)。由于PyQt是Python與Qt的結合,所以它既可以利用Python強大而又簡潔的語法,又不會丟失Qt強大的功能。從Python的角度來說,凡是Python涉及的所有簡潔、易用性的語法,PyQt都可以使用;凡是Python涉及的所有開源模塊,PyQt也都可以使用。從Qt的角度來說,由于PyQt完成了對Qt的所有類的封裝,因此,從理論上說,使用Qt能開發(fā)出來的東西,使用PyQt也可以開發(fā)出來,因此,PyQt可以利用Qt強大的功能。由于充分利用了雙方的優(yōu)點,所以PyQt在開發(fā)程序的過程中會帶來一些意想不到的收獲,利用Python的簡潔語法與強大而又豐富的生態(tài)圈,有些程序邏輯在Qt中實現會比較復雜,而在PyQt中卻很簡單,這才是PyQt最大的魅力之處。 近年來PyQt發(fā)展很快,從1998年最初的PyQt 0.1,到PyQt 1、PyQt 2、PyQt 3、PyQt 4以及最新的PyQt 5.9(截至2017年8月9日),并且實現了PyQt與Qt的同步更新。有一點非常遺憾的是,PyQt 5與PyQt 4并不兼容,PyQt 4的代碼無法在PyQt 5中運行。PyQt 5的誕生時間是2013年4月,至今,PyQt 5經過了快速發(fā)展,現在已經非常成熟,并且Qt開發(fā)團隊已經明確宣布從2015年開始就放棄了對Qt 4(對應PyQt 4)的支持,因此,對于想要學習PyQt的朋友來說,一開始就學習PyQt 5是一個最好的選擇。 然而,非常遺憾的是,市面上并沒有一本真正指導新手學習PyQt 5的教材,網絡上針對PyQt 5的學習案例的知識結構也都非常零碎,無法形成一個學習PyQt 5的系統化框架。因此,對于新手來說,想要快速接受PyQt 5系統性的訓練是一件非常困難的事情,筆者最初學習PyQt 5的時候也吃盡了苦頭,查閱了PyQt 5與Qt 5的大量官方文獻資料,并結合幾年的實戰(zhàn)應用之后,才可以說有一些水平。 編程是一個熟能生巧的活兒,目前PyQt 5的開發(fā)技術算是掌握一些了,但是如果未來不使用這項技術,那么再過幾年說不定就完全忘記PyQt 5是如何使用的了,如果是這樣的話就會給自己留下一些遺憾。考慮到現在個人還有一些額外的時間與精力,考慮到目前市面上還沒有一本關于PyQt 5使用的教材,于是本書應運而生。 寫書是一項神圣而又艱辛的工作,在本書的創(chuàng)作期間,為了讓本書包含更多的內容,同時又讓其變得更容易理解,我和搭檔孫洋洋查閱了大量的PyQt 5官方文獻資料,花費了很大的時間和精力在其中。本書得以順利出版,是無數個日日夜夜調試和寫作的成果。寫作本書時總會遇到一些復雜的PyQt 5技術問題,我和搭檔孫洋洋常常連續(xù)幾天熬夜討論,在每一個細節(jié)上反復推敲,每當攻克技術難點的時候,我們都感到無比快樂。我要特別感謝搭檔孫洋洋,沒有你的堅持和鼓勵,就不會寫出這么精彩的書籍,感謝你那較真的性格,謝謝你。 經過近一年的不懈付出,這本介紹PyQt 5的書終于出版了,希望這本書可以幫助更多的朋友掌握PyQt 5技術,少走些技術彎路。同時這本書能夠按時出版,我感到無比欣慰,無論近一年吃了多少苦、犧牲了多少時間都是值得的。 本書結構 本書共有11章,基本包含了筆者在使用PyQt的過程中遇到的絕大多數技術及一些經典的應用。書中有些章節(jié)是具有獨立性的,讀者可以針對自己的實際情況選擇閱讀。 第1章介紹PyQt的入門知識,講述PyQt的安裝配置,以及Eric 6這個IDE的簡單使用方法。已經有一定PyQt基礎的朋友可以略去這一章。 第2章簡單介紹Python的基本語法。本章內容針對一些沒有接觸過Python的讀者,已經有一些Python基礎的朋友可以略去這一章。 第3章介紹Qt Designer的使用方法。Qt Designer是一個PyQt的可視化界面編輯程序,它的作用是幫助用戶快速開發(fā)出界面文件,我們可以通過其他方式把界面文件轉換成Python代碼文件。對于不懂太多PyQt知識的讀者來說,本章內容可以讓你快速入門;同時,本章也是讓你的PyQt技術快速進步的最重要章節(jié)。 第4章介紹PyQt 5的基本窗口控件的使用方法。如果讀者的時間并不充裕,只對部分控件感興趣,則可以選擇相應的小節(jié)閱讀。 第5章介紹PyQt 5的高級界面控件的使用方法。如果讀者對PyQt的表格、樹、容器(多窗口控件)、多線程等感興趣,則可以選擇相應的小節(jié)閱讀。 第6章介紹PyQt 5的布局管理(在第3章中闡述Qt Designer的使用方法時已經做了介紹,當時是通過Qt Designer這個代碼生成器進行介紹的,而這里通過手工輸入代碼的方法進行介紹)。由于布局管理非常重要,值得我們用單獨一章來介紹。如果讀者對用純代碼實現布局管理器感興趣,則可以參考這一章;如果對用代碼生成器Qt Designer實現布局管理器感興趣,則可以忽略這個章節(jié)。實際上,這兩種方法并沒有本質的區(qū)別。 第7章介紹PyQt 5信號與槽的應用。信號與槽是PyQt的核心,想要掌握PyQt的高級玩法,則可以仔細閱讀這個章節(jié)。 第8章介紹PyQt 5的圖形和特效。本章內容適用于有PyQt繪圖、美化窗口需求的讀者。 第9章介紹PyQt 5的擴展應用。如果你想知道如何把Python的一些非常流行的模塊如PyInstaller、Pandas、Matplotlib、PyQtGraph、Plotly等與PyQt結合,則可以選擇性閱讀這個章節(jié)。 第10章通過幾個例子介紹PyQt 5的實戰(zhàn)應用。想要了解一些簡單的程序是如何開發(fā)的朋友,則可以選擇性閱讀這個章節(jié)。 第11章介紹PyQt 5在金融領域的應用,這是本書作者孫洋洋在金融公司工作期間積累的一些實戰(zhàn)性較高的案例,展示如何將PyQt 5應用到投資研究系統、量化投資以及金融工具開發(fā)中,讀者可以根據自己的需求選擇性閱讀。 本書附贈內容 附錄A:PyQt 5整體結構 附錄B:Python開發(fā)技巧與實踐 附錄C:Python在線學習資料 附贈內容保存在github上,網址是:https://github.com/cxinping/PyQt5,讀者可自行下載。祝讀者學習順利、事業(yè)有成。 本書讀者 本書適合具有 Python 基礎的讀者,通過本書可熟悉 Python 基礎知識并加深鞏固。本書結構合理,內容翔實,適合對Python、Qt和PyQt編程感興趣的科教人員和廣大的計算機編程愛好者閱讀,也可作為相關機構的培訓教材。 致謝 首先,我要感謝我的父親。在我上大學期間由于家庭變故,我的父親王貴誠生病去世了,這對我打擊很大。我一直很內疚,在他走之前,沒能見上他最后一面。在最后一次談話中,他要求我做一個對社會有用的人,實現自己的最大價值,盡自己的所能無私地幫助別人。如果時間可以倒流,我渴望給父親一個擁抱,對他說:我明白,一代人做一代事。作為其子,我愿意為您分憂。父親教會我人生的意義,讓我懂得人活著就要做有意義的事情,快樂地過每一天。我愛我的父親,我愛這個家。謝謝父親這些年的細心教導,讓我懂得生活的意義。謝謝您,我的父親。 其次,我要感謝我的叔叔王輝和嬸嬸一家,我的叔叔是我的偶像,也是我做人做事的榜樣。他教會我作為一個匠人,應該有的尊嚴和驕傲,他在我最困難的時候給予我無私的幫助,鼓勵我追尋心中的夢想。他經常跟我說,一生之計在于勤,一天之計在于晨,剛開始我覺得道理淺顯易懂,后來隨著年齡的增長、社會閱歷的增多,才逐漸明白,一個人只有付出不亞于任何人的努力,在自己的領域一直努力鉆研,鍥而不舍,才能成功。這個道理很淺顯易懂,當時年幼不覺得如何有用,直至今日,方才明白是至理名言。 本書的出版要特別感謝電子工業(yè)出版社的黃愛萍和葛娜,感謝她們在選題策劃和稿件整理方面做出的大量工作。 同時,在本書創(chuàng)作過程中,感謝編委會的全體成員,提出很多寶貴的意見。感謝編委會的邢夢來,犧牲了大量的業(yè)余時間,積極和作者討論寫書細節(jié),校對了全部課件程序,對每個程序都做了中文注解。 感謝兄長徐楠光,教會我用感恩的心去工作,積極主動地面對困難,讓我對擁有的一切心懷感激。 感謝我的母親徐素萍,感謝我的妻子李蕾,感謝你們在我寫書的時候給我提出的建議,鼓勵我寫成此書。感謝母親多年來含辛茹苦的培養(yǎng),您對我的默默支持,是我積極向上的精神動力。 感謝我的好兄弟王祥平,在本書的出版過程中提出了很多寶貴的意見。在我心力交瘁時,鼓勵我永不放棄,在科大學習期間是我一生中最快樂的日子。 感謝我的師傅張云河,您是我做人做事的榜樣。感謝您教會我寶貴的專業(yè)知識,在我最落魄的時候給予我巨大的幫助,讓我有能力去實現自己的夢想。我將繼續(xù)追隨您,為夢想而努力。 感謝潭州教育的眾位老師,IOS學院的院長Dream老師,Python學院的院長強子老師,Android學院的院長Hank老師,教會我專業(yè)的技術,使我的技術突飛猛進,還鼓勵我要為社會做出更多的貢獻,實現自己的人生價值。 感謝羅曦、張劍、陳曉楠三位同學,為本書的編寫提供了大量支持。 感謝洛基英語(Rocky English)的韓宏術老師、查理老師和劉安樂老師,使我的英語水平得到提高,讓我掌握了地道、流利、準確的英語發(fā)音,可以無障礙地閱讀英文技術文檔。給予我信心,幫助我建立人生的目標和夢想。 最后,特別感謝克亞營銷的劉克亞老師,拜讀您寫的《超高價營銷》時,經常激動得徹夜難眠,書中的每個觀點都讓我興奮不已,一二三成功模式更是堅定我寫本書的原因,您教導我要先無私地給予別人,幫助別人成功,然后自己才能成功,推崇共贏而不是競爭。作為您的學生受益良多,您提出的克亞營銷鐵律,教會我如何實現自我價值。 王碩,網名信平,北京鼎鑫拓達資深軟件工程師,具有8年的Java企業(yè)應用開發(fā)經驗和3年教育培訓經驗。曾主持多個B/S項目的開發(fā),經驗豐富。擅長J2EE(JSP/Servlet、 JDBC、Struts2、Spring、Hibernate)項目開發(fā)、Python(程序GUI、數據分析、網絡爬蟲、機器學習)項目開發(fā),JavaScript、HTML 5和數據庫技術,是極寬Top開源團隊核心成員。 孫洋洋,現就職于一家資產管理公司,負責公司量化投研系統的開發(fā)與維護,有多家券商工作與實習經驗。擅長網絡爬蟲、機器學習、程序GUI開發(fā)與設計,對量化投資領域興趣濃厚,有多年量化投資實盤操作經驗,是極寬Top開源團隊核心成員。
目 錄
第1章 認識PyQt 51 1.1 PyQt框架簡介1 1.1.1 PyQt 5的特點3 1.1.2 Qt與PyQt的關系4 1.1.3 其他圖形界面開發(fā)庫介紹4 1.1.4 PyQt 4/PyQt 56 1.1.5 Python 2/Python 36 1.2 PyQt 5環(huán)境搭建7 1.2.1 在Windows下搭建PyQt 5環(huán)境7 1.2.2 在Mac OS下搭建PyQt 5環(huán)境15 1.2.3 PyQt 5的安裝測試20 1.2.4 安裝其他Python模塊22 1.2.5 使用PyQt 5的API文檔23 1.3 Eric 6的安裝與使用25 1.3.1 Eric 6的安裝及漢化26 1.3.2 Eric 6的相關配置29 1.3.3 安裝自動補全插件jedi33 1.3.4 測試Eric 635 1.3.5 Eric 6的基本使用35 1.4 本書程序下載39 第2章 Python基本語法41 2.1 Python簡介41 2.2 數據類型43 案例2-1 基本運算43 2.3 String(字符串)45 案例2-2 字符串入門45 案例2-3 字符串常用方法46 2.4 List(列表)47 案例2-4 列表操作48 2.5 Tuple(元組)49 案例2-5 元組操作49 2.6 Dictionary(字典)50 案例2-6 字典操作50 2.7 數據類型轉換52 2.8 控制語句53 案例2-7 控制語句53 2.9 自定義函數54 案例2-8 函數定義55 2.10 函數partial55 案例2-9 partial函數的使用56 2.11 lambda表達式57 案例2-10 lambda表達式操作57 2.12 類和實例58 案例2-11 類和實例的使用58 2.13 類的屬性和方法59 案例2-12 類的屬性和方法的使用59 2.14 類的動態(tài)屬性61 案例2-13 類的動態(tài)屬性操作61 第3章 Qt Designer的使用64 3.1 Qt Designer快速入門64 3.1.1 新建主窗口65 3.1.2 窗口主要區(qū)域介紹66 3.1.3 查看UI文件68 3.1.4 將.ui文件轉換為.py文件70 3.1.5 界面與邏輯分離74 3.2 布局管理入門75 3.2.1 使用布局管理器布局76 3.2.2 使用容器進行布局79 3.3 Qt Designer 實戰(zhàn)應用81 3.3.1 絕對布局81 3.3.2 使用布局管理器布局83 3.3.3 其他需要注意的內容91 3.3.4 測試程序94 3.4 信號和槽關聯96 3.4.1 簡單入門97 3.4.2 快速進階101 3.5 菜單欄與工具欄106 3.5.1 界面設計106 3.5.2 效果測試110 3.5.3 應用:加載其他窗口112 3.6 打包資源文件115 3.6.1 使用Qt Designer加載資源文件115 3.6.2 在窗體中使用資源文件116 3.6.3 轉換資源文件118 3.6.4 導入.py資源文件119 第4章 PyQt 5基本窗口控件122 4.1 QMainWindow122 4.1.1 窗口類型介紹122 4.1.2 創(chuàng)建主窗口123 案例4-1 創(chuàng)建主窗口124 4.1.3 將主窗口放在屏幕中間125 案例4-2 主窗口居中顯示125 4.1.4 關閉主窗口127 案例4-3 關閉主窗口127 4.2 QWidget128 4.2.1 窗口坐標系統129 4.2.2 常用的幾何機構130 案例4-4 屏幕坐標系統顯示131 4.2.3 創(chuàng)建第一個PyQt 5應用133 案例4-5 建立一個主窗口133 4.2.4 為應用設置程序圖標136 案例4-6 設置程序圖標136 4.2.5 顯示氣泡提示信息137 4.3 QLabel138 案例4-7 顯示QLabel標簽140 案例4-8 QLabel標簽快捷鍵的使用142 4.4 文本框類控件143 4.4.1 QLineEdit143 案例4-9 EchoMode的顯示效果146 案例4-10 驗證器147 案例4-11 輸入掩碼149 案例4-12 綜合示例150 4.4.2 QTextEdit152 案例4-13 QTextEdit的使用152 4.5 按鈕類控件154 4.5.1 QAbstractButton154 4.5.2 QPushButton154 案例4-14 QPushButton按鈕的使用155 4.5.3 QRadioButton158 案例4-15 QRadioButton按鈕的使用158 4.5.4 QCheckBox160 案例4-16 QCheckBox按鈕的使用161 4.6 QComboBox(下拉列表框)164 案例4-17 QComboBox按鈕的使用164 4.7 QSpinBox(計數器)166 案例4-18 QSpinBox的使用167 4.8 QSlider(滑動條)168 案例4-19 QSlider的使用169 4.9 對話框類控件171 4.9.1 QDialog171 案例4-20 QDialog的使用171 4.9.2 QMessageBox173 案例4-21 QMessageBox的使用175 4.9.3 QInputDialog176 案例4-22 QInputDialog的使用176 4.9.4 QFontDialog178 案例4-23 QFontDialog的使用178 4.9.5 QFileDialog180 案例4-24 QFileDialog的使用181 4.10 窗口繪圖類控件184 4.10.1 QPainter184 案例4-25 繪制文字185 案例4-26 繪制點187 4.10.2 QPen189 案例4-27 QPen的使用189 4.10.3 QBrush191 案例4-28 QBrush 的使用192 4.10.4 QPixmap194 案例4-29 QPixmap的使用194 4.11 拖曳與剪貼板195 4.11.1 Drag與Drop195 案例4-30 拖曳功能197 4.11.2 QClipboard198 案例4-31 QClipboard的使用199 4.12 日歷與時間202 案例4-32 QCalendar的使用202 案例4-33 QDateTimeEdit的使用209 4.13 菜單欄、工具欄與狀態(tài)欄212 4.13.1 菜單欄212 案例4-34 QMenuBar的使用212 4.13.2 QToolBar214 案例4-35 QToolBar的使用215 4.13.3 QStatusBar216 案例4-36 QStatusBar的使用217 4.14 QPrinter218 案例4-37 QPrinter的使用218 第5章 PyQt 5高級界面控件221 5.1 表格與樹221 5.1.1 QTableView221 案例5-1 QTableView的使用222 5.1.2 QListView224 案例5-2 QListView的使用225 5.1.3 QListWidget226 案例5-3 QListWidget的使用226 5.1.4 QTableWidget227 5.1.5 QTreeView245 5.2 容器:裝載更多的控件251 5.2.1 QTabWidget251 案例5-4 QTabWidget的使用252 5.2.2 QStackedWidget254 案例5-5 QStackedWidget的使用254 5.2.3 QDockWidget256 案例5-6 QDockWidget的使用257 5.2.4 多文檔界面259 案例5-7 多重文檔界面260 5.2.5 QScrollBar262 案例5-8 QScrollBar262 5.3 多線程264 5.3.1 QTimer264 5.3.2 QThread268 案例5-9 應用案例:分離UI主線程與工作線程274 5.3.3 事件處理276 5.4 網頁交互278 案例5-10 加載并顯示外部的Web頁面278 案例5-11 加載并顯示本地的Web頁面280 案例5-12 加載并顯示嵌入的HTML代碼281 案例5-13 PyQt調用JavaScript代碼283 案例5-14 JavaScript調用PyQt代碼286 第6章 PyQt 5布局管理294 6.1 好軟件的三個維度294 6.2 PyQt 5中的布局管理295 6.3 PyQt 5的絕對位置布局296 6.4 QBoxLayout(框布局)298 6.4.1 QHBoxLayout(水平布局)298 6.4.2 QVBoxLayout(垂直布局)300 6.4.3 addStretch()函數的使用301 6.5 QGridLayout(網格布局)303 6.5.1 單一的網格單元格304 6.5.2 跨越行和列的網格單元格306 6.6 QFormLayout(表單布局)308 6.7 嵌套布局309 6.7.1 在布局中添加其他布局309 6.7.2 在控件中添加布局311 6.8 QSplitter314 第7章 PyQt 5信號與槽317 7.1 信號與槽介紹317 7.1.1 定義信號318 7.1.2 操作信號319 7.1.3 信號與槽的入門應用320 7.1.4 快速進階324 7.2 信號與槽再細分324 7.2.1 內置信號和槽函數324 7.2.2 內置信號和自定義槽函數325 7.2.3 自定義信號和內置槽函數326 7.2.4 自定義信號和槽函數327 7.3 信號與槽的高級玩法328 7.3.1 高級自定義信號與槽328 7.3.2 使用自定義參數333 7.3.3 裝飾器信號與槽335 7.3.4 信號與槽的斷開和連接337 7.3.5 Qt Designer神助攻:界面顯示與業(yè)務邏輯的分離339 7.3.6 多線程中信號與槽的使用345 7.4 事件處理機制入門348 7.4.1 事件和信號與槽的區(qū)別348 7.4.2 常見事件類型348 7.4.3 使用事件處理的方法349 7.4.4 經典案例分析349 7.5 窗口數據傳遞362 7.5.1 單一窗口數據傳遞363 7.5.2 多窗口數據傳遞:調用屬性364 7.5.3 多窗口數據傳遞:信號與槽368 第8章 PyQt 5圖形和特效373 8.1 窗口風格373 8.1.1 設置窗口風格373 案例8-1 設置窗口風格374 8.1.2 設置窗口樣式375 8.1.3 使用自定義的無邊框窗口376 8.2 繪圖378 8.2.1 圖像類378 8.2.2 簡單繪圖379 8.2.3 雙緩沖繪圖381 案例8-2 繪制矩形,出現重影382 案例8-3 使用雙緩沖技術繪制矩形,避免出現重影384 8.3 QSS的UI美化387 8.3.1 QSS的語法規(guī)則387 8.3.2 QSS選擇器類型389 8.3.3 QSS子控件390 8.3.4 QSS偽狀態(tài)391 8.3.5 QDarkStyleSheet392 8.4 設置窗口背景395 8.4.1 使用QSS設置窗口背景395 8.4.2 使用QPalette設置窗口背景396 8.4.3 使用paintEvent設置窗口背景398 8.5 不規(guī)則窗口的顯示400 8.5.1 不規(guī)則窗口實現動畫效果404 8.5.2 加載GIF動畫效果406 8.6 設置樣式407 8.6.1 為標簽添加背景圖片407 8.6.2 為按鈕添加背景圖片407 8.6.3 縮放圖片409 8.6.4 設置窗口透明409 8.6.5 加載QSS410 第9章 PyQt 5擴展應用412 9.1 使用PyInstaller打包項目生成EXE文件412 9.2 數據庫處理417 9.2.1 SQLite介紹417 9.2.2 連接數據庫421 9.2.3 執(zhí)行SQL語句422 9.2.4 數據庫模型視圖425 9.2.5 封裝分頁查詢控件428 9.3 Pandas在PyQt中的應用435 9.3.1 qtpandas的安裝435 9.3.2 官方示例解讀43
你還可能感興趣
我要評論
|