编程经典详丛 Python与 kinter编程 Python and Tkinter programming JohE. Grayson著 陈文志高垒缪瑾崔仁涛译 赐防x荤出旅社 北京 暑作杈合同登记号图字军-2001-0号 图书在版编目(CIP)数据 Python与 Tkinter瘺程/(关}格雷森( Grayson,JE)著 陈文等泽.一北京:国防T业出版补,20029 编栏经典译丛) 1名原文: Python and Tkinter Programming SBN7[18-42781-2 !.P.II1格.2陈..m,1 PYTHON语言 程序设计2图形程序包, TinterIVvrP312 印版本图书館CIP数核字(202)第0457号 @2000 by Manning Publications Co. All rights reserved Published by arrasiyernntnt wiLl Manning Publications Co.,LSA 木文简体版由 Manning Publications Co授予国防r业出版村 〔独东)出版、版杖所仃,仗权必究 關F出社出版发行 北泉巾酒淀〖紫竹院瘸路23号 1邮政编码10044 北京鬼隆E印 新作 开787×109216印38;F字 20029汀第↓版20竹9北京第1次F耻 数;1-300期定价:66. 本书如有印装错误,我杜负责调换) 前言 我是在1993年加入位 Rhode island的-个小公圳时结识 Python的。他们的主要 品是为 X/Motif产生C、C+、Ada利 Python编码的G- builder我的任务是为 XMatit 和 Python扩屐面向对象歼面。在这之前,我一直怀疑解释性语言的川途,因此,开始这 作时,我兴趣不,两天之后,我上瘾了。使用C言编码很复杂的界闻,能够很容 易地完成!不久,我更乐丁选择使川P而不是c来开发界面 离开 Rhode island的公可之后,我开始使用 Tkinter开发软件,这成了有名的 Python GU。我说服了一家公(我住那呈做点合同C)来通过 Python编码开发一个濒临超时 和超出预算的大项目,项很成功。四年以后,该公司有了很多 Python程序员,他们的 项日中相海的代码是通过 Tkinter和 Python来完成的 l足这些经力,使得我编写这本书。卓些时候, Python可用文档资料很少, Tkinter Life preserver是第-本帮动人们把基本信凑到一起的书。199年, Frednk Lundh在网 上发和了不少优秀的 Python类文档,这些为近两年 Python编程起到极人的作用。我所 心纠的儿个问题之一是;虽然有很多例彩件随 Python的发布不少,但他们人部分内容 太简洁,不能代衣 Python程序完整架。当然,要把代码一个个连起来运转也不难,但 是,当体系结构依赖于解释语言时,很容易得到一个在执行速度、美感、可维护性和可 护展性意义上差劲的立品 因此,我写此时别人问的第一个问题是:"我如何编个XXX?我会给他堆我 写过的源代码ε像大部分专业程序员一·样,他将详细研究。我相信,从一个完幣理序 着手是学习某一特定編稈语言的好方法,能够达到特定的日标 我练习“空手道”的时猴常去新泽西 Shukokai世界总部,和 Sensei shigeru kim 练习。 Sensei Kimura.经常告诉我们:“我不能告诉你怎么攸(某一特定技术)—一你必 须去‘偷’。”我的学习 Tkinter釣办法也是-样的。如東衬区里的人解决了某个间题,我 们必须从他们!那里“偷”。现在,我不是建议侵犯板权,我的意思是,我们从能得到的任 何资料学习知识。我希望弥把木书的例子作为程序的起点。在一些地方,我已经使用了 其他程序员的代码戍想法。如果是这样,我已经向原作者致谢了。如果你使用了这里的 些代码,我希望你能够对原作者致谢。毕竟,我佾“倫”来的东西比我们自已的更有 I 价恒,这是从 Sensei那里得来的。 我对 Douglas A.Yung的 The X Window system: Programming and ApplicationS with Xe -书5的风格印象很深刻。它有生老了,但是有一个完整的代码,其中许多可以做新应用 程序的樱板。《 Python与 Tkinter编程》有些类似的东西。你会发现一些很长的、崩 的编程比籍中很少呢到的例子。我希望计多这里的例子可以作为解决特定问题的程序员 的模板或源码n 展示整个完整例子而不是一个程序段将使你们然悉到我的编程风格。在《yhon与 kner编样》的阅过程中,一些审岗者就提出一些别的风格。在可能的地方,我都采 纳了他们的意见。因此,书中的例子包含了多人的风格。我希望读者在自己的编程实践 中能有所提高 我希望你发塄《 Python与 Tkinter编程》一书有用。如果它在你编程时能为你省下 两个小时,你用米阅该的几个小时也是值得的 特剔致谢 Python与 Tkinter》一是多人智慧的结品。他们中的每人都为此书的出版尽 尽力。足他们的很多金玉良言,使此书更完美 我嬰感谢技术审阅队伍: Fred L. Drake, Robin Friedrich, Alan Gauld, Bob gibson, ynn Grande Doug Hellmann, Gatrett G. Hodgson, Paul Kendrew, Andrew M. Kuchling Cameron Laird gregory A. Landrum, Ivan Van Ladingham, Burt Leavenworth, Ken NcDonald, Frank McGeough, Robert Meegan, William Peloquin, Robert ]. Roberts F Guido van rossun。他们提供了详细的评论,使此书的内窄、重点和准确性得到大大改进 很多例∫源代码是从其他人的代码中得来的。我要感谢这些代码编写者允许此使 用他们的代码。 Doug hellman在Pmw中写了个优秀的模块, GUEApPD, py,我改写后成为书中的 ppShell!py!书中还使用了很多例子。Doug允许我使用其代码。如果你发现此代码可以 在你的应用中使用的话,请感谢原作者 Konrad hinson了 IkPlotCanvas py,原本是在 Numpy,即数字操作最优的扩展模 块F的。我将它改为不需要在Nmpy卜由,还增加了些图形功能。如果你发现能用到你 作中,感谢原作者 第8章的树和点类是从 Penthe他们发布的公开码里得来的。你是否想看看他们 组织将米发行的版本?因为本书中树控件的例子都米源于位们。 附B把T手珊作为TkG文档的起点他们的版权所有者,加利福尼亚的Ree 和 Sun Microsystem允许从中导出些结果,向他们致谢。 我要感谢〔 eneral Dymlaruies的 Gordon smith,他在负员的许多项目中很有信心地使 用 Python和 kinter,看到他们的使用,是导致我写此书的重要原因。我曾把其中一些 草将章节给他们的员和内部学员测试,来解次他们编程任务。 其次,我要感谢 Manning出版社把我的想法变为此书的诸君。我料发行人 Marjan Bace进行过长时间的谈话,从而使我完成了这一复杂任务,使得本书对读者有用。Ted Kennedy协调整个复审过程,提出了许多建没性意见。 Mary Piergics和技术编辑 Kristen Back,排字员 Dottie marsico一道负责此的出版。 Doug Hellman是一位很好的技术編 辑,纠t了不少印结果中的代码错误。 最后,我要感谢我妻子Alon,我的孩子Nima、Chis、Je和Ala,他们懂得牺 性一个什们利父亲也意味着赢得个作家 致读者 《Pyho与 Tkinter编程》旨不:为知道或熟悉Pyho,前又想在中加入图形界画 的程序员(可能是使用 Manning A'] Quick Python为指导)而写的。丙为《yhn与 Tkinter 编稈》提供了大量的功能例子和详细代码注解,有其他编稈经验但没有 Python经验的程 序员会发现此为他们业即解决实际河题很有帮助。 此书还可以作为Tc/Ik脚本程序员把T/k转变为 Python和 Tkinter的好指南。然 而,并不打算从哲学的角度来讨论是否适合—我存有偏爱 关于作者 John grayson是一个图形用户界面GUI方面的顾问。他为一家美国通讯大公司从事 应用设计多年,致力于设计革新性的界,并引入了Py利面向对象编方法取代传 统的丌发方式。另外他还为商业用户提供 Python与 Tkinter应用。 他获得应用牛物学学十学位和分子生物学博十学位,但此决非一个隋碍(其因为 他90%的论文是酶行为的计算机模)。 在专攻用户界面之前,他是个摆作系统专家,后来为 Stratus Computer公司Umx开 发支持方法。他在 Pacer软件公司做了个F打编译器和Un便携「具。他还是在美国和 英国的 Prime Computer公可的操作系统专家 约定 κ Python与 Tkinter编程》一中例子起到了极大的作用。不少编程书籍中例子的 特征是短小简洁,把一两个要息很好地表述出来但其实不起什么作用。本书中、例 子可能适合你的应用域者正是需要的。很多例子钓目的是单独运行,向不是交互式的。 人部分例子包括标号以及对应的注解。例如: def mouseDown iself, event] self currentobject -None selflasix self startx selE canvas. canvass (event,x3 导eLf,sty=se1 c+starty=的白1anva,canv3y( event.y if not self. current func self. selob] self canvas. =inc closest (self, start 导e1f, starty)[0 3:1f,公VIA.计 msconfig(se1E.se1Cj,wid-2】 eL. carVa.1iE.忘e1f良1上j 代码注解 ●鼠标按卜方法反选任何当前已经选定对象。事件返回在屏幕中亂标点击点的x和 y坐标。画布邦件的 CAnvas和 canvas方法 ●如果绘画功能没有选中,则我们在选择模式下,并且在画布中对最近的对象定位, 然后选中。该方法 偶尔,我把部分代码变为崽体强调其在代码子中的重要性。 有些地方代码跨越了多页,我巳经把鴻代码散开,这样注释和源代码的距离可以保 持比较近。任例子中的标号都是连续的 VIi 关守封面 本书封画是从1805年版的 Sylvain Marechal的四卷地区服饰习俗概述中得来的。这 本第一次于1788年在巴黎出版,是在巴黎革命前一年。单单标题就30多字。 Costumes Civils actuels de tous les peulpFes connus destines d'apres nature graves et colonies, accompagnes d'une notice historique sur leurs coutumes, moeurs, religions, etc, etc. rediges par M. Sylvain Marechal 四卷包括图片的注解:“ grave a la maniere noire par micelle d'apres desrais et colorie"。很明显,能将雕刻嫄和插图者姓氏罗例下来,已经不镨∫,因为毕竟他们 只是艺术家而已。向丰绘这些东西的人则默默无闻。 这一丰富多彩的艺术品集生动地向我们说羽了200年前的城市和乡村文化如何远离 去。服饰不断变化,不同地区也差异甚远。当年的多样性渐已消失。现在,很难区分 一个大陆和另一个大陆之间的差异。也许,我们已经用文化的多样化换取了人生的复 确实,多么丰富和激动的技术环境啊。在无法区分一本计算机书和另一本计算机书 的时候, Manning通过在封面上使用200年前的池区生活的多样性来庆祝计算机事业的 发明和兴起,带回到 Marechal图片的生活中。想一想, Marechal《世界是个远远不州 于我们的批界,在那里,人们愿意花时间去阅读30个字的标题。 作者在线 Python与 kinter编程》的购买包括了可以进入一个私人 nternet论坛,在那里 你可以对此做评论,提出技术问题以及从作者及其他读者那里获得帮助。你通过你的 浏览器浏览htp:/www.manning.com/grayso进入论坛。那堕,你可以订阅论坛,此站点 还提供信息,告诉你一旦注册之后如何加入论坛,可以得到什么样的帮助以及论坛行为 准则。 书中所有的例fitManning主页土都有,URL为www.manning.com/grayson,包括 了一个指向源代码的链接n VIl