今天9月11日,我开始翻译《Thinking In Tkinter》。
关于《Thinking In Tkinter》中文版
我通过网上的书籍自学了Tkinter,发现比我预想的困难很多。最主要的问题是,大部分人只告诉你了,怎么来使用Tkinter的工具箱(Toolkit)里的组件(widgets),但从来不解释那些最基本的概念。他们不来不解释Tkinter工作的原理,所以我就写了这本书,告诉你关于Tkinter的前生后世。
《Thinking In Tkinter》文中包含了一些剪短的示例代码,去解释Tkinter 原理。我没有试图去归类所有的组件(widgets),也没有企图去解释每个组件的属性(attributes),更没有去使用每个方法(methods);我只想告诉你成为Tkinter高手之前,一些最好能了解的一些基本概念。
《Thinking In Tkinter》中文版,没有告诉你怎么去使用Tkinter编码;你可以参考其他的数据,我只试图告诉你一些最基础的,最好要了解的基本Tkinter原理。当然,我推荐你参考这本书《Practical Programming in Tcl and Tk 》;这本书是作为Tkinter的相关工作人员,必须参考的书目之一。你可以参考一下EasyGui,可以加速你的开发进度。也可以试一下Visual TK,这个在线的Tkinter窗口生成工具。
《Thinking In Tkinter》中文版,全文中的示例代码,使用Python来写,译者Robin,在Python 3.7 Win7 版本上运行测试过。你可以从头读到尾,也可以按你的兴趣跳读感兴趣的章节。
- thinking.py - 事件驱动的程序(the driver program)
- tt000.py - 简介(introduction)
- tt010.py - 最简单/简陋的Tkinter程序(simplest possible Tkinter program: 3 statements)
- tt020.py - 创建一个界面程序,包含布局、容器、组件(creating a GUI object; packing; containers vs. widgets)
- tt030.py - 创建一个包含组件的容器(creating a widget and putting it in a frame)
- tt035.py - 面向对象的程序(using a class structure in the program)
- tt040.py - 定义组件的方法(some other ways to define a widget)
- tt050.py - 布局(packing)
- tt060.py - 事件绑定(event binding)
- tt070.py - 绑定组件的键盘事件("focus" and binding a widget to keyboard events)
- tt074.py - 动作绑定(command binding)
- tt075.py - 事件驱动、动作绑定混合使用(using event binding and command binding together)
- tt076.py - 交互信息(sharing information among event handlers)
- tt077.py - 通过事件来传达参数(甲部)(passing arguments to event handlers (part 1) - the problem)
- tt078.py - 通过事件来传达参数(乙部)passing arguments to event handlers (part 2) - solving it with lambda
- tt079.py - 通过事件来传达参数(丙部)passing arguments to event handlers (part 3) - solving it with currying
- tt080.py - 组件属性及布局设定(widget options and pack settings)
- tt090.py - 嵌套容器(nesting frames)
- tt095.py - 窗口管理的方法和控制窗口的大小(Window Manager methods & controlling the size of windows with the geometry option)
- tt100.py - 布局的属性(pack options: side, expand, fill, anchor)
第一章:事件驱动的Tkinter程序
基于Gui的程序一般要完成如下四个任务:
- UI程序长什么样?【比如,统计数据的程序,应该有3个按键(打开、分析、保存)】
- UI程序干什么事?【要先打开Excel文件;开始分析数据;保存分析结果;】
- UI程序的画面和要干的事情,关联起来;【3个按键,和功能关联起来】
- 完工后,等待用户来操作;【启动后,等待用户来操作】
GUI程序的行业准则
通过GUI来驱动的程序,有一些经典准则跟以上四个任务关联。
- 我们会详述,GUI程序会以什么样的形式来展示,比如描述一个功能单元,以及他们之间的业务关联(比如这个功能放上边或下边,左边或者右边)。组件(Widget)这个词基本上用来代替GUI功能单元。组件一般会保护窗口、按钮、菜单、菜单项、图标、下拉列表、滚动条等等。
- 具体工作的功能单元(函数),一般被GUI程序叫作回调句柄或者事件句柄。事件(Events)就是按了鼠标左中右键或者键盘按了某个键。这些功能单元被叫作操作杆,因为他们响应这些事件,操纵具体功能。
- 把事件的操作杆(Event Handlers)和组件(Widget)关联的动作,就绑定(binding)。绑定的过程一般主要做三件事(a:什么类型的事件,可能输鼠标左键,也可能是回车键;b:那个组件; c:完成什么样的工作;)。例如Close的按钮【那个组件】,左键按了之后呢【那个事件】,会关闭整个程序【退出窗口&关闭程序】。
- 做成事件发生并相应的过程,就是事件循环;
关于事件循环(Event Loop)
事件循环,就像一个看门狗。静悄悄的凝视着这个世界,啥也不干。大多数事情看门狗不感兴趣,只是看一看,什么也不干。但是当他感兴趣的事情发生了,刚好这个事情有有跟这个功能单元绑定了,立马开始响应。
程序的表现
接下来的程序,简单演示了一下了一些基本概念和一些基本的实现。他们可不使用Tkinter,也没有啥其他的GUI程序。他们在控制台上显示了一个菜单供你选择,只需要一些简单的键盘响应。
Code
第二章:最简单的只有3行的Tkinter程序
在第一章中,我们讲了界面驱动的程序,主要完成四项任务。这个程序啥也不干,只有一个事件循环。
- 引入Tkinter库,让Tkinter可用;
- 创建一个窗口;
- 开始进入事件循环;
这个程序会有啥表现呢?
运行之后,就一个窗口;右上角有个最小化、最大化、关闭关键。试一下之后,都会工作。
点一下右上角的X的按键,就好发出一下销毁事件,立马销毁并关闭事件循环;之后退出mainloop(),其他啥也不干,完了。
第三章:GUI程序的窗口、容器、组件辩证关系
这一章,主要解决GUI程序基本任务,长什么样的问题。在这个小程序中,我们主要演示三个基本概念:
- 创建一个GUI对象,跟他的主人建立关联;
- 组合框架、组件;
- 框架容器和组件区别;
从现在开始,我们来讨论容器和组件区别。通常来说,组件Widget就是看的见的功能单元,会干一些事完成一定的任务;而容器更新一个篮子,用来放置组件的。Tkinter提供一些容器,比如画板容器Canvas就是用来画一些东西的容器。更流行的叫他们框架。框架呢,在Tkinter中,有一个类叫Frame,一般他们是这么用的。
Frame类,要指定一下父类(一般是一个root);Frame类的名字就是myContainer1。简单而言,Frame类的对象,就是用来发那些可视的组件的(这个小程序,没有可视的组件,以后会用到)。
程序中的父子关系,是一种逻辑关系。这种关系呢,主要方便程序销毁的时候,父组件销毁前,先把子组件销毁一下。
代码的第二句,就是把框架组装一下。很简单,Packing就是把建立一个让逻辑关系,显示出来。你不组装,那些组件还是看不到。
Pack如何工作呢?就是调用Tkinter的位置管理器;位置管理器,就会告诉Tkinter,怎么来组合容器和可视化的控件。Tkinter支持三种位置管理器:pack,grid,place。Pack和Grid比较常用,因为他们很容易使用。本身中的例子,都使用的是Pack框架。
翻译正式开搞!

本文介绍了《Thinking In Tkinter》中文版的翻译背景,强调了书中阐述Tkinter基本概念的重要性。内容涵盖事件驱动的Tkinter程序、简单程序示例及GUI程序的窗口、容器和组件的关系。书中通过Python代码示例解释Tkinter原理,旨在帮助读者掌握Tkinter基础,而不仅仅是工具箱的使用。
2928

被折叠的 条评论
为什么被折叠?



