Differences between revisions 13 and 14
Revision 13 as of 2007-09-23 12:54:41
Size: 21484
Editor: hairui
Comment:
Revision 14 as of 2007-09-23 13:04:27
Size: 21466
Editor: hairui
Comment:
Deletions are marked like this. Additions are marked like this.
Line 21: Line 21:
 大约在此时,我不得不“真正”开始主项目的开发了。在我的控制下,一些项目开发者们一起进行设计会晤、设定开发期限,从眼中的灵光一现开始完成完整的项目开发。我发现自己又完全回到了{{{C++}}}世界,尽管可以用{{{Python}}}来进行一些编译及项目的测试脚本。{{{Harri}}} 也无法在上面投入任何时间了,因此{{{wxPython}}}的开发变得比“爬行”还慢,有时甚至进入了停滞状态。  大约在此时,我不得不“真正”开始主项目的开发了。在我的支配下,项目开发者们一起进行设计会晤、设定开发期限,从眼中的灵光一现开始完成个项目开发。尽管可以用{{{Python}}}来进行一些编译及项目的测试脚本,我发现自己又完全回到了{{{C++}}}世界。{{{Harri}}} 也无法在上面投入任何时间了,因此{{{wxPython}}}的开发变得比“爬行”还慢,有时甚至进入了停滞状态。
Line 23: Line 23:
 1997年,我发现了{{{SWIG}}}(简单封装和接口产生器),并意识到它可以帮助我们解决wxPython项目中困扰我们已久的所有维护问题。在三、四周的业余时间里,通过使用{{{SWIG}}},我几乎将{{{wxPython}}}的全部重新实现了一遍,而在此前用手工完成这项工作耗用了我几周的完整时间以及Harri几个月的部分时间。在转向其他项目一段时间后,我发现{{{wxWidgets 2.0}}}正在积极开发中,而且有了一个全新的架构,因此我不得不重新完成这项工作。但这次,新的架构简化了大量的工作,我仅用了一周的业余时间就完成了!因此,在1998年夏天,第一个“现代版本”的wxPython顺利发布,并从此一直处于活跃开发状态。第一份声明归档于:[http://groups.yahoo.com/group/python-announce-list/message/95 此处]  1997年,我发现了{{{SWIG}}}(简单封装和接口产生器),并意识到它可以帮助我们解决wxPython项目中困扰已久的所有维护问题。在三、四周的业余时间里,通过使用{{{SWIG}}},我几乎将{{{wxPython}}}的全部重新实现了一遍,而在此前用手工完成这项工作耗用了我几周的全天时间以及Harri几个月的兼职时间。在转向其他项目一段时间后,我发现{{{wxWidgets 2.0}}}正在积极开发中,而且有了一个全新的架构,因此我不得不重新完成这项工作。但这次,新的架构简化了大量的工作,我仅用了一周的业余时间就完成了!因此,在1998年夏天,第一个“现代版本”的wxPython顺利发布,并从此一直处于活跃开发状态。第一份声明归档于:[http://groups.yahoo.com/group/python-announce-list/message/95 此处]

活学活用wxPython

attachment:cover.jpg

TableOfContents

前言

关于 Harri PasanenRobin 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一起致力于推进PythonwxWidgets的绑定(在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的热情,在轻松开发图形用户界面应用程序方面,它是真正的独一无二的开发包。我们写作的初衷是不但为初学者,也为专业人员建造一项有用的资源。

acknowledgments

Our work on this book has been aided by a number of people, in ways both obvious and subtle.

Patrick O’Brien was instrumental in getting this project off the ground and Marjan Bace, our publisher at Manning Publications, gave us the chance to make it happen. Jackie Carter was our first editor at Manning and Lianna Wlasiuk came in at a crucial juncture, and, like a great bullpen pitcher, earned the save. We would like to thank our production team at Manning and every-one who worked behind the scenes on the book, especially our copyeditor Elizabeth Martin and our typesetter Denis Dalinnik. Big thanks also to our agent Laura Lewin for her help and understanding.

We’ve benefited a great deal from the generosity of programmers world-wide in creating the technologies used in this book. First on that list is the crew who developed the wxWidgets foundation of wxPython: Julian Smart, Vadim Zeitlin, Robert Roebling, and the rest of the core wxWidgets team, as well as many contributors. Of course, without Guido van Rossum and other members of the Python language development team, there would be no “Python” in “wxPython.” A large part of this book was written using the jEdit text editor and the images were manipulated using the GIMP.

Thanks also to the many reviewers who looked at the manuscript in its vari-ous stages of development and added their valuable insight along the way. They helped make this a better book: Alex Martelli, Dave Brueck, Christopher Bailey, Mike Stok, Jean Baltus, Thomas Palmer, Jack Herrington, Peter Damoc, Nick Coghlan, Pim Van Heuven, John Paulson, Ian Brown, Stefan Neis, Chris Mellon, Kevin Ollivier, and Doug Tillman. Special thanks to Clint Howarth who was our technical proofreader.

NOEL RAPPIN My wife, Erin, makes my life better every day. Thank you for your strength, your intelligence, and your love. I also want to thank my parents Donna and Donnie and my sister Michelle for supporting me fully and com-pletely. Matt Cohen helped this effort by entertaining me via IM while I was try-ing to write. Finally, I want to thank my daughter Emma, who is now old enough to be excited to see her name in a book, and my son Elliot, in anticipation of the day he will also be glad to see his name.

ROBIN DUNN I’d like to thank my wife, Malaura, and my children, Jordyn, Myka, Samuel, and Christian, for their patience, understanding, and love. You make it worth the effort to get past all the difficulties of life. I’d also like to thank the many wonderful members of the wxPython user community whose praise and excitement have helped me to stay motivated and have helped me to take wxPython from an interesting toy to a very useful tool that thousands of develop-ers all around the world love and depend upon. And finally, many thanks go to Mitch Kapor, John Anderson, David Surovell, and others at the Open Source Applications Foundation for believing in the Open Source concept, the poten-tials of wxPython, and especially for believing in my capabilities and funding my work on wxPython for several years.

关于本书

谁应该阅读本书?

很自然,我们希望每个人都阅读本书。如果你正在书店阅读本书,并在考虑是否购买它,我们会说:“买下它!给你们身边的人也买一本,他们今后将会感谢你。”

也就是说,我们撰写本书时,我们头脑中对于读者您做了一定的假设。我们假设您不需要我们解释Python变成语言的基础。在书中,我们提供了大量的Python代码。我们认为Python代码非常易懂,但我们必须让您现在就知道我们在书中没有提供关于Python基础的入门指南。如果您需要一份Python指南,我们向您推荐Manning出版的《The Quick Python Book》,该书由 Daryl Harms  Kenneth McDonald编写。

同时我们也假设您至少熟悉描述图形界面对象的基本术语,并从用户角度对图形界面有个大概的了解。至于更加高级的用户界面概念,或者那些不常见的用户显示元素,我们会在用到的时候加以详述。

我们并没有假设您之前就掌握wxPython相关知识。如果您之前就接触过wxPython,我们仍然希望您从本书中能够找到新的信息,或者至少您会发现本书是比现有在线文档更加有用的资源。

本书是如何组织的?

我们将《活学活用wxPython》分成了三个部分。第一部分简要介绍wxPython的相关概念,并指导读者开始运用wxPython,同时还提供了一些wxPython最佳实践的信息。第一部分的章节包括:

  • 第一章 欢迎使用wxPython 在该章节中,我们对wxPython进行介绍,并解释为什么说它是自切片面包以来最伟大的事务,同时还提供了用于创建wxPython的一些技术背景资料。

    第二章 给wxPython程序一个坚实的基础 讨论了wxPython中最重要的两个对象。每个应用程序都必须有一个应用程序对象和一个顶级窗口。该章将展示如何启动一个wxPython程序,以及如何管理它的生命周期。第三章 在所有GUI开发包相同的事件驱动环境中工作 在wxPython中控制是通过事件进行管理的。该章讨论的是如何处理事件(Event),以及如何让它们像钩子一样驱动功能。

    第四章 使用PyCrust让wxPython更易于处理 PyCrust是用wxPython创建的一种Python外壳,包括了许多高级和有用的特性。你不仅可以使用PyCrust来进行wxPython开发,你也可以将程序封装于其中来进行调试,而且也可以在自己的应用中对PyCrust进行复用。

    第五章 创建蓝图 该章讨论了在GUI编程者经常遇到困难的领域内的三个最佳实践。我们展示了如何通过重构( refactoring )来提升代码的结构和可维护性。通过对 Model/View/Controller 设计模式的探索,我们展示了如何对GUI代码进行单元测试来将错误减少化。

    第六章 使用基础构建块 该章是第一部分和第二部分的一座桥梁。在已经展示的基础思想上,我们通过构建一个画板应用对第二、三部分将要讨论的特性进行了一些提示。

第二部分开始了本书更加细节的部分。第二部分中的章节讨论wxPython中最常用的部分内容。这些章节包括了对基础构件集合的入门介绍,讨论了标准窗体和对话框,以及对绘图和布局的相关信息。第二部分中的章节包括:

  • 第七章 使用基本控件 该章覆盖了基本构件集合的API函数,包括文本框、按钮、列表框等等。

    第八章 将构件放入窗体 所有的wxPython构件都必须放置在窗体或对话框中。该章覆盖了窗体如何运作、有哪几类窗体、如何管理窗体中的构件。

    第九章 使用对话框给用户选择 对话框的行为方式和窗体的略为不同。我们在该章中讲述了模式对话框以及标准预定以wxPython对话框如何工作。我们同时也展示如何使用wxPython校验器来帮助管理对话框中的数据。

    第十章 创建和使用wxPython菜单 多数窗口应用程序具备菜单。我们将展示如何向菜单栏添加菜单,以及如何向菜单中加入菜单项。同时也包含了特殊菜单,比如检查框、无线菜单等内容。我们也将讨论了键盘快捷键和高效使用菜单的有用的指引。

    第十一章 使用尺寸管理器放置构件 在 wxPython 中,尺寸管理器(sizers)被用来减轻手工放置构件这件苦差事带来的痛苦。wxPython中有多个有用的尺寸管理器,我们将向您展示如何使用它们,以及哪种布局最适合哪个管理器。

    第十二章 维护基本图形图像 任何图形界面的基本目标都是在屏幕上画线和形状。在wxPython中,有一系列的可用画图工具可供使用。同时还有一个叫做设备背景(device context)的强大的抽象概念,它使得我们可以向目标作图,而不考虑目标是窗口、打印机还是文件。

第三部分包括了对wxPython更加深入部分的细节讨论。它首先对三个最复杂的wxPython进行了描述,随后讨论了不同的打印和显示机制,最后对一些不值得单独设立章节的有用事务进行了简要介绍。第三部分的章节包括:

  • 第十三章 构建列表控制和管理列表项 wxPython的列表控件给了我们以图标模式、列表模式或多列报告模式显示“浏览风格”列表的能力。你也可以定义排序行为,并允许用户对列表条目进行编辑。

    第十四章,调整网格控件 如果你需要像电子表格一样的东西,wxPython的网格控件是符合你需求的完整功能构件。它允许对网格显示和行为的彻底控制,并允许完全的自定义配置。

    第十五章 “爬上”树型控件 wxPython 树型控件使得我们可以对分等级的数据进行紧凑显示,包括但不限于目录树或者类的继承关系。你也可以允许用户任意对条目进行编辑。

    第十六章 向wxPython应用程序中并入HTML 在wxPython中,你可以使用HTML来简化格式化文本的显示和打印。wxPython中的HTML引擎可以定义以用于满足特殊需求。

    第十七章 wxPython打印框架体系 wxPython中的打印通过一些专门的打印、打印数据和打印预览对象来进行管理。在该章中,我们对它们如何一起工作进行了探索。

    第十八章 使用其他wxPython功能 在该章中,我们讲述了一些重要的特性,它们还没有长到可以单独设立章列的地步,包括剪切、粘贴、拖放和多线程。

如何使用本书

如何使用本书取决于您对wxPython的掌握了解程度我们对本书的策划目标是要对专家和初学者都有所帮助,但也希望不同层次的用户对本书的不同部分都有或多或少有所共鸣。

如果你是wxPython初学者,你一定会想从第一部分开始。第一章至第三章帮助您夯实wxPython相关概念的坚实基础。第六章则对构建合理大小程序的步骤进行了完整回顾。第五章介绍如何让代码更易于管理的方法,第四章提供了一些协助进行调试、编写wxPython应用的工具。当你开始编写自己的wxPython程序时,你就已经开始使用第二部分讨论的API了——我们试图按照功能进行组织章节内容,以方便您查找有用的主题。

如果您对wxPython已经熟悉了,你可能将时间主要花在第二部分和第三部分之上。然而,我们依然推荐您快速阅读一遍第一部分。如果您不熟悉PyCrust,第四章对您来说就是新内容了,我们相信在第五章中您也能找到一些有用的内容。

在第三部分,您将会发现一些更加复杂的构件的讨论,您将发现这些章节中的代码比其他章节中的更长也更加完整。 本书中的这些例子都是基于Python 2.3.x编写的——我想我们没有包括所有Python 2.4和wxPython 2.5中的新特性。wxPython 2.6.x版本发布比较迟了,因此本书无法涵盖其内容。然而,它确实包含了大量的BUG补丁和对wxWidgets的有限兼容。

正式开始之前,还有一点我们必须指明。那就是本书并不准备事无巨细地提供wxPython的所有内容的参考。我们期望本书能够为您需要知道的所有功能特性提供参考,但它确实没有100%覆盖所有的特性。出于时间和空间的考虑,我们不得不选择将重点放在某些元素上,而其他的一些则无法详细介绍。例如,有一些从C++ wxWidgets中继承的wxPython特性在标准Python库中得到了复制,对于这些特性我们选择不在本书中涵盖。同时,如果你使用了1990年代的Windows操作系统,您可能会发现一些例子中的特性并非如所描述的那样起工作,在此我们没有足够的空间枚举出这些例外。最后,有一些核心构件集合的特性我们认为并不经常用到,因此我们也没有空间公平对待它们。

印刷约定

本书中始终使用一下约定:

  • Courier 字体使用在所有代码列表中
  • Italics 字体用来介绍新术语
  • Courier Bold 字体有时用来吸引您对部分代码的注意。
  • 代码注释用来将您的注意力指向特定的代码行注释采用句点标记,比如 b.
  • Courier 字体用于代码中的文本,wxPython类和方法名称,或者Python代码片段。

代码下载

本书中使用的所有例子的源代码可以从出版商的网站[http://www.manning.com/rappin]下载。

从何处获得更多帮助

虽然我们尽可能地让本书易于理解,但我们不可能预见您你在使用wxPython过程中可能预见的所有用法和问题。wxPython的主站[http://www.wxpython.org]有一些资源也许可以帮助您解决问题。官方在线文档位置为:[http://www. wxpython.org/docs/api/]在[http://wiki.wxpy-thon.org/]有一个互助wiki网站,当然你也可以订阅[http://www.wxpy-thon.org/maillist.php]处的邮件列表。

作者在线

也可以从作者在线论坛获取帮助,这是一个由Manning出版商提供的私人网页论坛。您可以通过该论坛对本书进行评论,咨询技术问题,接受来自作者或其他读者的帮助。使用浏览器访问[http://www.man-ning.com/rappin]可获取这些免费服务。论坛的欢迎页面给出了注册和其他行为所需的所有信息。 作者在线论坛( Author Online forum)是Manning始终忠于读者的表现方式之一。作者对论坛中的参与是完全资源的,没有任何特定级别的义务性。论坛是与他人分享思路和向他人学习的好途径。主要本书仍在销售中,就可以出版商的网站进入作者在线论坛。

关于书名

通过组合介绍、回顾和“如何”例子,“活学活用”书籍设计意图是帮助学习和记忆。按照认知科学的研究成果,人们记住的事务是他们在自主探索中获得的事务。 尽管Manning公司没有谁是认知科学家,但我们确信要想让所学变成永久财富,必须经历探索、实际动手操作,(有趣地是还包括)对所学内容的重述等步骤。人们对新事务进行理解和记忆,也就是说只有在积极探索之后,人们才会掌握它们。人们总是在使用的过程中学习。“活学活用”引导的基本部分是实例驱动的。它鼓励读者自己尝试,对新代码实际操作以及探索新的思路。 对于本书的书名来说,还有一条更加通俗的理由,我们的读者都很忙碌。他们使用书籍往往是为了完成某项工作或解决某个问题。他们需要的书籍能够允许他们自由跳跃式阅读,只在需要某个知识点的时候才对它进行学习。他们需要书籍使自己处于“运转”状态。该系列的书籍是为这样的读者设计的。

关于封面绘图

《活学活用wxPython》一书的封面图形为“Soldat Japonais”,一名日本士兵。该插图取自1796年法国出版的由J. G. St.  Saveur所著的 法文旅游书籍 《Encyclopedie des Voyages》。在那个时候,为寻求快乐而旅行还是个相对新鲜的现象,像该书一样的旅游指南非常受欢迎,它不仅介绍了旅程者自己,还反映了惬意的旅行者前往法国其他地区及国外居住地的见闻。

《Encyclopedie des Voyages》一书中多样的插图生动地反映了200多年前世界各地的城镇和省份的独特和个性。这个时代,两个相隔仅数英里的地区会通过服饰代码来区分人所属地。这本旅行指南在狂热的现实中唤醒了我们关于那个时代及其他历史时期的那种与世隔绝的感受。

那个年代之后,服饰代码已经发生变化,地区差异也随时代变迁逐渐褪色。现在,我们经常会很难区分居住不同大洲的居民。也许,乐观点来说,我们已经将文化、可见差异与更加多样性的个体生活做了一次交易。或者说一个更多样的充满趣味的的理性、技术性生活。 在Manning,我们通过该旅行指南中的图片将两个世纪之前地区生活间的丰富差异带回现实,以此赞美计算机商业的独创性、能动性与乐趣性。

WxPythonInAction (last edited 2009-12-25 07:19:14 by localhost)