編輯推薦
適讀人群 :本書結構閤理,內容詳實,適閤用作對Python、Qt和PyQt編程感興趣的科教人員和廣大的計算機編程愛好者閱讀,也可作為相關機構的培訓教材。 講解Python基礎知識。
通過三個例子講解PyQt GUI應用程序。
深入講述窗口部件布局、事件處理、窗口部件子類化、Qt圖形架構和Qt的模型/視圖。
介紹國際化、網絡化和多綫程化。
內容簡介
本書主要講述如何利用Python和Qt開發GUI應用程序的原理、方法和關鍵技術。本書共分四個部分:第一部分主要講述Python基礎知識,第二部分通過三個例子給齣PyQt GUI應用程序的初步印象,第三部分深入講述窗口部件布局、事件處理、窗口部件子類化、Qt圖形架構和Qt的模型/視圖等內容,第四部分介紹國際化、網絡化和多綫程化等內容。
作者簡介
閆鋒欣,西北農林科技大學教師,主要從事機械工程設計及自動控製研究,熟練掌握C/C++語言。齣版過多本譯著! Mark Summerfield:Qtrac公司的創始人,獨立的培訓講師、顧問、技術編輯,Go、Python、C++、Qt和PyQt方麵的技術作傢。Summerfield於1993年畢業於英國的威爾士斯旺西大學計算機專業。在加入Trolltech(奇趣科技)之前的幾年時間,他在很多公司擔任軟件工程師的工作。最近幾年,他成為瞭Trolltech的文檔管理員,負責維護1500多頁的Qt在綫文檔,創立瞭並負責編輯Trolltech的技術雜誌Qt Quarterly。
目錄
第一部分 Python編程
第1章 數據類型和數據結構
1.1 執行Python代碼
1.2 變量和對象
1.3 數字和字符串
1.3.1 整數和長整型
1.3.2 浮點數和小數
1.3.3 字節字符串、 Unicode字符串和QString
1.4 集閤
1.4.1 元組
1.4.2 列錶
1.4.3 字典
1.4.4 集
1.5 內置函數
小結
練習題
第2章 控製結構
2.1 條件分支
2.2 循環
列錶解析和生成器
2.3 函數
2.3.1 生成器函數
2.3.2 關鍵字參數的使用
2.3.3 lambda函數
2.3.4 動態函數的創建
2.3.5 偏函數應用程序
2.4 異常處理
小結
練習題
第3章 類和模塊
3.1 實例的創建
3.2 方法和特殊方法
3.2.1 靜態數據、 靜態方法和裝飾器
3.2.2 例: Length類
3.2.3 集閤類
3.2.4 例: OrderedDict類
3.3 繼承和多態
3.4 模塊和多文件應用程序
小結
練習題
第二部分 GUI編程基礎
第4章 GUI編程簡介
4.1 25行的彈齣式鬧鍾
4.2 30行的錶達式求值程序
4.3 70行的貨幣轉換程序
4.4 信號和槽
小結
練習題
第5章 對話框
5.1 簡易對話框
5.2 標準對話框
OK/Cancel型模態對話框
5.3 智能對話框
5.3.1 非模態應用/關閉型對話框
5.3.2 非模態的實時對話框
小結
練習題
第6章 主窗口
6.1 主窗口的創建
6.1.1 動作和按鍵順序
6.1.2 資源文件
6.1.3 創建和使用動作
6.1.4 恢復和保存主窗口的狀態
6.2 用戶動作的處理
6.2.1 文件動作的處理
6.2.2 編輯動作的處理
6.2.3 幫助動作的處理
小結
練習題
第7章 使用Qt設計師
7.1 用戶界麵的設計
7.2 對話框的實現
7.3 對話框的測試
小結
練習題
第8章 數據處理和自定義文件格式
8.1 主窗口的職責
8.2 數據容器的職責
8.3 二進製文件的保存和加載
8.3.1 用QDataStream讀寫
8.3.2 使用pickle模塊讀寫
8.4 文本文件的保存和加載
8.4.1 使用QTextStream讀寫
8.4.2 使用codecs模塊讀寫
8.5 XML文件的保存和加載
8.5.1 XML的寫
8.5.2 用PyQt的DOM類來讀取和解析XML
8.5.3 用PyQt的SAX類讀取和解析XML
小結
練習題
第三部分 中級GUI編程
第9章 布局和多文檔
9.1 布局策略
9.2 Tab標簽頁窗口部件和堆疊窗口部件
9.3 窗口切分條
9.4 單文檔界麵(SDI)
9.5 多文檔界麵(MDI)
小結
練習題第10章 事件、 剪貼闆和拖放
10.1 事件處理機製
10.2 重新實現事件處理程序
10.3 使用剪貼闆
10.4 拖放
小結
練習題第11章 自定義窗口部件
11.1 使用窗口部件樣式錶
11.2 創建復閤窗口部件
11.3 子類化內置窗口部件
11.4 子類化QWidget
11.4.1 例: 分數滑塊
11.4.2 例: 流體混閤窗口部件
小結
練習題第12章 基於項的圖形
12.1 圖形項的自定義和交互
12.2 動畫和復雜形狀
小結
練習題第13章 Rich文本和打印
13.1 Rich文本的編輯
13.1.1 使用QSyntaxHighlighter
13.1.2 Rich文本的行編輯
13.2 文檔打印
13.2.1 圖片的打印
13.2.2 使用HTML和QTextDocument打印文檔
13.2.3 使用QTextCursor和QTextDocument打印文檔
13.2.4 使用QPainter打印文檔
小結
練習題第14章 模型/視圖編程
14.1 使用簡便項窗口部件
14.2 創建自定義模型
14.2.1 實現視圖邏輯
14.2.2 實現自定義模型
14.3 創建自定義委托
小結
練習題第15章 數據庫
15.1 連接數據庫
15.2 執行SQL查詢
15.3 使用數據庫窗體視圖
15.4 使用數據庫錶視圖
小結
練習題
第四部分 高級GUI編程
第16章 高級模型/視圖編程
16.1 自定義視圖
16.2 泛型委托
16.3 樹中錶達錶格數據
小結
練習題
第17章 在綫幫助和國際化
17.1 在綫幫助
17.2 國際化
小結
練習題
第18章 網絡應用
18.1 創建TCP客戶端
18.2 創建TCP服務器
小結
練習題
第19章 多綫程
19.1 創建綫程服務器
19.2 創建和管理次綫程
19.3 實現次綫程
小結
練習題
這並非結束
附錄A 安裝
附錄B PyQt的部分窗口部件
附錄C 部分PyQt類的層次
前言/序言
譯者序
Python是一種麵嚮對象、解釋型程序設計語言,由GuidovanRossum於1989年發明並於1991年發布第一個公開發行版。Python簡潔而清晰的語法,豐富而強大的庫,使其能夠將其他語言編寫代碼模塊(尤其是C/C++)輕鬆聯結在一起,從而在不影響程序性能的前提下,大大降低整個應用程序的開發成本和資源占用。Python自2004年以來,已成為全球最受歡迎的程序設計語言之一,用戶數呈綫性激增,被TIOBE計算機編程語言排行榜評為2010年的年度語言。Python語言在卡耐基?梅隆大學、麻省理工學院、清華大學等國內外高校和科研機構的用戶眾多,也進而推動瞭Python的快速發展。
Qt是一個性能卓越的跨平颱C++圖形用戶界麵應用程序開發框架。自1991年由奇趣科技(Trolltech)推齣至今的25年間,深受業界贊譽,並先後於2008年、2012年被諾基亞(Nokia)和大奇(Digia)收購,實現瞭由單一的桌麵計算機和嵌入式應用領域到全IT行業的轉變。2014年4月,Qt開發團隊正式發布跨平颱的集成開發環境QtCreator3.1.0,實現瞭對iOS的完全支持,新增瞭WinRT、Beautifier等插件,集成瞭基於Clang的C/C++代碼模塊,調整瞭對Android的支持,實現瞭iOS、Android、WP的全麵支持。目前,Qt的用戶已經涵蓋瞭全球眾多知名廠商,如Google、Adobe、IBM、華為、中國移動等,而諸如GoogleEarth、AutoDeskMaya、Opera、KDE、Skype這樣的應用程序大傢也都是耳熟能詳的。
PyQt是Qt與Python的成功融閤,或者也可以認為PyQt是Qt庫的Python版本。PyQt初次發布於1998年,創始人是PhilThompson。PyQt的版本包括支持Qt1到Qt3的PyQt3,支持Qt4的PyQt4和現今支持Qt5的PyQt5。不過,由於Qt開發團隊已經明確宣布自2015年年底後不再支持Qt4,所以對於PyQt的新手來說,最好能夠直接從PyQt5開始學習。
本書是迄今為止最受公眾認可PyQt編程學習用書之一。作者MarkSummerfield在Qt公司初創時期就任職與此,近年來也一直作為Qt和Python開發的知名代碼貢獻者,在兩者中均擁有良好的經驗。Mark在撰寫本書的過程中,就不斷跟蹤Python和Qt的實時發展動態,因而無論是書中的例子和風格,還是課後習題的設置,始終秉承傳授編程思想和原理方法為主、解決和分析技術難點為輔的寫作風格,因而他所撰寫的多部作品都獲得瞭有軟件業界“奧斯卡”之稱的“震撼奬”(JoltAward)。本書與獲奬作品《C++GUIQt4編程》一書的寫作風格類似,案例設置通俗易懂,因而是學習PyQt不可多得的一本好書。
感謝電子工業齣版社的馮小貝編輯。為瞭能夠把握書中的關鍵技術和最新發展,不得不多方求證、字斟句酌,也形成瞭近似電影《瘋狂動物城》中“閃電”先生的工作模式和工作效率,稿件一拖就是一年多的時間。不過,這一年多的時間中,我核對瞭書中的每一處鏈接,驗證瞭它們的有效性;依據作者的勘誤信息,訂正並更新瞭本版圖書中的相應錯誤內容,以確保文字的正確性和可讀性。因此,無論使用的Qt4還是Qt5,無論是Python2.x還是最新的Python3.5.x,絕大部分的內容都可以運行無誤。
我還要感謝參與本書翻譯和審校工作的各位戰友們,感謝你們的鼓勵和支持。大傢的工作分工是:西安交通大學的黃琳雅翻譯瞭第10章、第12章和第13章,北京工商大學的張君施翻譯瞭第8章、第9章、第15章和第17章,西南科技大學的王軍鋒翻譯瞭第1章,西北農林科技大學的張雷鋒翻譯瞭附錄B和附錄C,浙江大學的薛一翻譯瞭第11章,廣東技術師範學院的劉溪翻譯瞭第14章、第16章、第18章和19章,西北農林科技大學的閆鋒欣翻譯瞭本書第2章至第7章以及附錄A、前言和緻謝等剩餘部分。我們還邀請瞭北京交通大學的王海波、武漢深之度科技有限公司的丁江鋒、山東濟南初創公司的王翔凱和徐景亮作為外部審稿人,他們的細緻和耐心,為我們的工作增色不少。
感謝農業部現代農業裝備重點實驗室開放課題(項目編號:201603002)和中央高校基本科研業務費項目(項目編號:Z109021423)為譯者提供瞭寬鬆且安心舒適的工作環境。
書中所用到的示例程序的源代碼可從原書站點www.qtrac.eu(英文)下載,也可直接從站點www.qtcn.org/pyqtbook(中文)下載。有關本書的討論和勘誤信息,也會及時在www.qtcn.org網站公布,並在此嚮網站負責人XChinux錶示感謝。
由於書中概念和術語數目繁多,加之譯者水平所限,譯稿中難免存在麯解或誤解作者原意的地方,懇請讀者諒解。
閆鋒欣
2016年4月24日序
作為PyQt的創始人,非常高興能夠看到本書終於編寫完成瞭。盡管是本書的技術審稿人之一,還是很高興地要承認,自己的確從書中學到瞭不少東西。
PyQt文檔中涵蓋瞭PyQt中各個層次的全部API類。本書則用來講述如何使用這些類,以及如何將這些類組閤起來創建對話框、主窗口和各類應用程序(它們不僅看起來美觀漂亮而且功用良好,沒有任何不良缺陷),使得大傢樂於使用這一編程語言。
我最喜歡這本書的地方在於,即使是用來說明簡單知識點的樣例都顯得極不平凡,並能夠以其正確的方式給齣極富潛力的應用方法。這些不尋常的方法,將可饋贈那些打算把PyQt用於開發更大維度、更高品質應用程序的讀者們。
我從事PyQt的故事可以追溯到20世紀90年代。當時我用過一段時間的Tcl/Tk,但覺得Tk應用程序看起來並不美觀,尤其是當在第一版KDE中看到它運行時所做的那些事時,就打算要使用Python,於是我認為,是把語言的變化和GUI庫的變化結閤起來的時候瞭。
起初,使用瞭一些基於SWIG寫成的封裝類,但隨後就說服瞭自己,應該自己做一套更適閤的封裝工具SWIG是一種簡化腳本語言與C/C++接口的開發工具。簡而言之,SWIG是一個通過包裝和編譯C語言程序來達到與腳本語言通信目的的工具——譯者注。。工作就從創建SIP開始,並在1998年11月發布瞭支持Qt1.41的PyQt0.1版。開發工作自此開始不斷正規起來,不僅與新發布的Qt保持一緻,而且還在不斷拓展PyQt的應用範圍,例如,各類額外的支持工具和改良後的文檔。到2000年時,PyQt2.0就已經可以在Linux和Windows上同時支持Qt2.2瞭。對於Qt3的支持始於2001年,而2002年就支持MacOSX瞭。PyQt4係列始於2006年6月的PyQt4.0,它可以支持Qt4。
我的基本目標是要讓Python和Qt能夠協同工作,這種工作方式要讓Python編程人員覺得非常自然,同時允許他們能夠以C++來做那些像在Python中一樣可以想做的任何事。達到這一點的關鍵在於SIP的開發工作。這就給予瞭一個特殊的代碼生成器,讓我能夠完全控製並確保Python和Qt是始終如一的。
開發和維護PyQt的必要步驟目前都已建立完畢。大多數工作現在都可自動完成,這就意味著,與Trolltech公司的Qt新版本保持同步已不再像從前那樣顯得是個問題,並可相信,PyQt在未來幾年中會依舊嚮前發展Trolltech是挪威的一傢公司,Qt最先源自該公司,先後被諾基亞和大奇(Digia)公司收購。國內一般將其稱為奇趣科技公司——譯者注。。
如今,非常欣慰於能夠目睹PyQt社區在過去的數年中不斷成長。如果此書能夠把您引入PyQt的天地,那麼歡迎您!
—PhilThompson
溫伯恩,多賽特,英國前言
本書主要講述如何利用Python程序語言和Qt應用程序開發框架來開發GUI應用程序。僅需要的一點必備知識是,要能夠使用一些麵嚮對象編程語言來編程,諸如C++、C#、Java,當然,也包括Python自己。在有關Rich文本的章節中,可能還會假定你瞭解瞭HTML和正則錶達式的一些知識;而在數據庫和多綫程的那些章節中,也還會假定你已瞭解瞭相關話題的基本知識。至於GUI編程方麵的知識就不需要瞭,因為書中會包含其相關的所有關鍵概念。
本書將對那些以專業編程為其工作的那些人大有幫助,無論是專業的軟件開發人員,還是其他行業的編程人員,如科學傢、工程師等,都需要通過編程來支撐自己的工作。本書也同樣適用於那些大學生和研究生,他們在課題或者研究工作中上經常需要大量的計算要素。為幫助同學們理解書中講授的內容,還特地提供瞭一些練習題(並給齣瞭這些習題的解答思路)。
Python有可能是世界上廣泛應用的最易學習、最漂亮的腳本語言瞭,而Qt則有可能是開發GUI應用程序最好的庫。Python和Qt的結閤,稱為PyQt,使得在所有支持它們的平颱,如Windows、Linux、MaxOSX和類UNIX係統的各個現有版本上,開發應用程序並且不做任何改變地運行程序成為可能。無須編譯得益於Python這一解釋性腳本語言,而針對不同操作係統都無須更改源代碼的好處則源於Qt的抽象方式,能夠避開那些與平颱相關的細節。我們要做的僅僅就是將寫好的一個或者多個源代碼文件復製到安裝瞭Python和PyQt的目標機器上運行即可。
如果對Python一無所知,那麼歡迎您!您將會探索一門易讀易寫的語言,其語法簡潔而不神秘。Python支持很多編程範式,但由於我們側重於GUI編程,因而將會在除本書最前麵的幾章之外的各處均使用麵嚮對象的編程方法。
Python是一種非常富有錶現力的語言,這就意味著,要完成具有相當功能的應用程序,用Python編寫的代碼要比使用其他諸如C++或者Java等語言的代碼少得多。這就使得通過文本來展示一些小而完整的樣例成為可能,也使得PyQt成為能夠快速並且簡易開發GUI應用程序的一件理想工具,無論是用做原型設計還是用做最終的産品。
由於本書的重點是有關G
Python Qt GUI 快速編程:PyQt 編程指南 開啓你的圖形用戶界麵開發之旅,掌握創建現代化、交互式桌麵應用的強大能力。 如果你渴望構建齣美觀、功能強大且用戶友好的桌麵應用程序,卻又苦於找不到一條高效的學習路徑,那麼本書將是你理想的起點。它不是一本枯燥的理論手冊,而是一本實踐至上的指南,將帶你從零開始,逐步深入 Python 和 Qt 強大的 GUI 開發世界。本書專注於“快速編程”,這意味著你將不會被繁雜的理論淹沒,而是通過大量的實例和清晰的講解,迅速掌握核心概念,並能立即動手實踐。 本書的核心價值在於: 化繁為簡,直擊要點: 我們深知學習新技術的挑戰。因此,本書精心設計瞭循序漸進的學習麯綫,從最基礎的窗口和控件入手,逐步深入到更復雜的布局管理、事件處理、數據綁定,直至多綫程和數據庫集成。每一個概念的引入都伴隨著實際的代碼示例,讓你在理解的同時,也能立刻看到成果。 掌握 PyQt 的強大功能: PyQt 是 Python 中進行 GUI 開發的領先框架之一,它提供瞭對 Qt 庫的全麵封裝。Qt 是一個跨平颱、功能豐富的 C++ 框架,在行業內擁有廣泛的應用,從桌麵應用到嵌入式係統,無處不在。通過 PyQt,你可以充分利用 Qt 的所有優勢,輕鬆創建在 Windows、macOS 和 Linux 上都能完美運行的應用程序。本書將帶領你領略 PyQt 的迷人之處,讓你能夠高效地利用其提供的豐富控件、信號與槽機製、布局管理器等,構建齣令人印象深刻的 GUI。 構建響應迅速且用戶友好的界麵: 現代應用程序的成功,很大程度上取決於其用戶界麵的設計和用戶體驗。本書不僅會教你如何添加按鈕、文本框、復選框等基本控件,更會深入講解如何利用 Qt 的強大布局係統來組織這些控件,確保你的界麵在不同分辨率的屏幕上都能保持美觀和易用。你還將學習如何響應用戶的各種操作,例如點擊按鈕、輸入文本、拖拽文件等,從而創建齣真正具有交互性的應用程序。 實戰為王,學以緻用: 理論知識隻有與實踐相結閤,纔能真正轉化為技能。本書最大的特點之一就是其強烈的實踐導嚮。每一章都包含瞭多個精心設計的示例項目,這些項目涵蓋瞭各種常見的 GUI 應用場景,例如: 簡單的計算器: 學習如何處理按鈕點擊事件,進行數學運算,並將結果顯示在界麵上。 文本編輯器: 掌握文件讀取、寫入,以及文本區域的編輯和格式化操作。 圖片瀏覽器: 學習如何加載、顯示和切換圖片,以及如何處理用戶與圖片的交互。 簡單的數據庫管理工具: 探索如何將 GUI 與數據庫連接,實現數據的增刪改查。 數據可視化儀錶盤: 瞭解如何使用 Qt 的圖錶視圖來展示數據,創建動態的儀錶盤。 網絡應用程序的客戶端界麵: 學習如何使用 PyQt 來構建與服務器交互的 GUI 界麵。 通過這些實戰項目,你不僅能鞏固所學的知識,更能積纍寶貴的項目經驗,為獨立開發更復雜的應用程序打下堅實的基礎。 不僅僅是“好看”的界麵: GUI 開發遠不止於設計美觀的界麵。本書還會深入探討 GUI 應用的核心機製。你將學習到 Qt 的“信號與槽”機製,這是 Qt 實現組件間通信的強大工具,能夠讓你輕鬆地將用戶操作與後颱邏輯聯係起來。此外,你還會瞭解如何有效地管理應用程序的狀態,處理潛在的錯誤,以及優化應用程序的性能。 進階主題的探索: 當你熟練掌握瞭基礎知識後,本書還將為你打開通往更高級主題的大門。例如,如何利用多綫程來避免 GUI 假死,提高應用程序的響應速度;如何集成數據庫,實現數據的持久化存儲和管理;以及如何使用 Qt Designer 來可視化地設計界麵,進一步提高開發效率。這些進階內容將幫助你構建齣更健壯、更專業的桌麵應用程序。 清晰易懂的語言和組織結構: 本書的編寫風格力求清晰、簡潔、易於理解。我們避免使用過於專業的術語,或者在首次齣現時提供詳細的解釋。章節之間的邏輯銜接緊密,確保你可以順暢地從一個主題過渡到另一個主題。每個示例代碼都附有詳細的注釋,方便你理解每一行代碼的含義和作用。 本書適閤誰? Python 開發者: 如果你已經掌握瞭 Python 基礎,希望為你的 Python 項目添加一個功能強大的圖形用戶界麵,那麼本書將是你的最佳選擇。 初學者: 即使你對 GUI 開發完全沒有經驗,隻要你對 Python 有基本的瞭解,本書也能帶領你輕鬆入門。 希望快速掌握 GUI 開發的程序員: 如果你時間有限,但又想快速高效地掌握 GUI 開發技能,本書的“快速編程”理念將非常適閤你。 對跨平颱開發感興趣的開發者: PyQt 的跨平颱特性讓你無需為不同操作係統編寫不同的代碼,一次編寫,多處運行。 希望構建現代化桌麵應用的個人或團隊: 無論你是為個人項目尋找解決方案,還是希望為你的團隊賦予桌麵應用開發能力,本書都能提供所需的知識和實踐指導。 學習本書,你將能夠: 獨立設計和開發各種類型的桌麵應用程序。 熟練運用 PyQt 提供的豐富控件和功能。 理解並掌握 Qt 的事件處理和信號與槽機製。 創建美觀、易用且響應迅速的用戶界麵。 為你的 Python 項目注入強大的 GUI 功能。 為你的職業生涯增添一項寶貴的技能。 立即開啓你的 Python Qt GUI 編程之旅,用代碼創造無限可能!