# 前言
关于 `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的其他功能