# 前言
關于 `Harri?Pasanen` 和 `Robin?Dunn` 以及`wxPython`的傳奇故事確切的開始時間是1995年。本書的合著者之一,Robin 寫下了下面這段關于`wxPython` 的文字,而我們決定讓故事由參與者自己來講述,而不是籍由旁人加以引述:
* 1995年,我所進行的一個項目需要在HP-UX系統上部署一個圖形用戶界面,但我的老板卻同時希望在幾周后的一個內部展示會上通過Windows3.1掌上電腦來進行一些演示。因此,我開始搜尋跨平臺的C++ GUI開發包來進行原型開發。在那個時候,因為沒有Google,要完成這樣的工作實非易事。但我還是發現了一些商業化的可選開發 包(今天已經無一幸存)和大量的免費開發包。
當我正在評估分析哪個免費開發包符合當前的緊急需求,并決定哪個商業產品能夠滿足我們的長期需求時,我偶然看到了 wxWidgets 網站的術語“Python綁定”(這里“綁定”一詞指`Python`語言和`wxWidgets`開發包之間的聯系。)由于對如何將軟件開發包“綁定”到爬蟲動物(在此之前,我從來沒有聽說過Python語言)充滿好奇,我順著這個鏈接一個個的點擊,直到看到“Python 1.2 入門文檔”。三個小時后,我從當地的C++倡導者變成了Python的傳播者,不斷叨擾周邊的開發者,向他們展示我的最新發現。
我開始和芬蘭的`Harri?Pasanen`一起致力于推進`Python`和`wxWidgets`的綁定(在`Edward?Zimmerman`的協助下,最終形成了眾所周知的`wxPython?0.2`),而不是繼續我的原型開發。發行聲明的郵件列表歸檔于[此處](http://www.google.com/groups?selm=PA.95Jul27032244%40ok.tekla.fi&oe=UTF-8) 我們使它的功能強大到多足以讓我能夠用`Python`為老板建造一個原型。但是`wxPython`的維護和改進工作卻是一個噩夢,因為每件事情(包括`C++`擴展模塊代碼、`Python`代理模塊、編譯系統等等)都是手工完成的,`wxWidget`的一點點改進都會導致要修改多處`wxPython`代碼,以確保`wxPython`得到改進或修訂。當代碼增加上幾萬行時,這種工作方式變得非常笨拙和瑣碎。另一個客觀事實是:缺乏一個中心源代碼庫(那是`SourceForge`出現之前的時代),因此我們不得不通過電子郵件互相發送代碼更新,你可以想象得到這其中的難度。
大約在此時,我不得不“真正”開始主項目的開發了。在我的支配下,項目開發者們一起進行設計會晤、設定開發期限,從眼中的靈光一現開始,完成整個項目的開發。盡管還可以用`Python`來進行一些編譯及項目的測試腳本,我發現自己又完全回到了`C++`世界。`Harri` 也無法在上面投入任何時間了,因此`wxPython`的開發變得比“爬行”還慢,有時甚至進入了停滯狀態。
1997年,我發現了`SWIG`(簡單封裝和接口產生器),并意識到它可以幫助我們解決wxPython項目中困擾已久的所有維護問題。在三、四周的業余時間里,通過使用`SWIG`,我幾乎將`wxPython`的全部重新實現了一遍,而在此前用手工完成這項工作耗用了我幾周的全天時間以及Harri幾個月的兼職時間。在轉向其他項目一段時間后,我發現`wxWidgets?2.0`正在積極開發中,而且有了一個全新的架構,因此我不得不重新完成這項工作。但這次,新的架構簡化了大量的工作,我僅用了一周的業余時間就完成了!因此,在1998年夏天,第一個“現代版本”的wxPython順利發布,并從此一直處于活躍開發狀態。第一份聲明歸檔于:[此處](http://groups.yahoo.com/group/python-announce-list/message/95) 正如他們所說的,剩下的部分就是傳奇故事了。
必須特別說明的是:`SWIG` 使得我能夠輕松創建和維護成千上百行的代碼,因此`wxPython`的多種功能特性必須感謝`David?Beazley`以及其他項目參與者對`SWIG`的貢獻。
通過此書,我們希望能夠與您分享對于`wxPython`的熱情,在輕松開發圖形用戶界面應用程序方面,它是真正的獨一無二的開發包。我們寫作的初衷是不但為初學者,也為專業人員建造一項有用的資源。
- 活學活用wxPython
- 前言
- 致謝
- 關于本書
- 第一部分
- 第一章 歡迎使用wxPython
- 第二章 給wxPython程序一個堅實的基礎
- 第三章 在事件驅動環境中開發
- 第四章 用PyCrust使得wxPython更易處理
- 第五章 繪制藍圖
- 第六章 使用wxPython基本構件
- 第二部分 基礎wxPython
- 第七章 使用基礎控件
- 第八章 將構件放入窗體中
- 第九章 通過對話框讓用戶選擇
- 第十章 創建和使用wxPython菜單
- 第十一章 使用sizer放置構件
- 第十二章 操作基本圖像
- 第三部分 高級wxPython
- 第十三章 建造列表控件并管理列表項
- 第十四章 網格控件
- 第十五章 樹形控件
- 第十六章 在應用程序中加入HTML
- 第十七章 wxPython的打印構架
- 第十八章 使用wxPython的其他功能