Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72090
  • 博文数量: 26
  • 博客积分: 628
  • 博客等级: 中士
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 11:57
文章分类

全部博文(26)

文章存档

2012年(4)

2011年(19)

2010年(3)

我的朋友

分类: Python/Ruby

2011-04-27 16:01:14

在之前的程序中, 我们介绍了一些通过事件处理器让你的程序可以真正工作起来的方法.

在本例子中, 我们会对事件处理器之间共享信息作个简短的介绍.

*在事件处理函数之间共享信息*

在很多情况下, 你应该都会遇到想在一个事件处理器中处理了一些事情后, 将处理的结果与另一个事件处理器共享.

一个最常见的情况是你的程序有两组控件. 其中一组用于设置或选择了一些信息, 另一组则用于对这些选择的信息进行处理.

打个比方, 你可能有一个控件用于让用户从一大堆文件中挑出一个文件来, 而另外还有一组控件用于操作这些控件 -- 打开, 删除, 拷贝, 重命名等.

也可能你有一组控件用于设置应用程序的一些配置信息, 而另一组(可能是按钮来提供SAVE和CANCEL操作)会将这些配置保存到磁盘中, 或不保存直接退出.

也可能你用一组控件设置了一个程序的启动参数, 而用另一个控件(可能是一个叫RUN或EXECUTE的按钮)来用这些参数启动这个程序.

还有可能你需要将这次事件处理函数的一些信息传给该函数下次的调用中. 可以将这个事件处理器简单的理解为每次调用它就会将一个变量在两个值之间进行切换. 为了将新值赋给这个变量, 我们就必须知道上次调用事件处理函数时, 将它切换成了哪个值.

*问题*

问题在于每个事件处理器都是一个单独的函数. 每个事件处理器都有它无法与其他事件处理函数共享的局部变量. 所以这个问题就是 -- 在事件处理器无法与其他函数共享自己的局部变量时, 那么应该怎样共享这些信息?

办法1 -- 使用全局变量

其中一种办法就是将那些你想共享的变量都搞成全局的. 比如, 在每个处理器, 当你需要修改myVariable1和myVariable2时, 你加上这一句:

    global myVariable1, myVariable2

但使用全局变量会有潜在的危险, 而且在代码写的比较乱的时候也不好维护.

办法2 -- 使用实例变量

一个很好的办法是使用"实例变量"(也就是'self.')来保存你想要共享的信息. 当然, 你想这么干的话, 你的程序必须先实现一个类, 而不是写一些in-line代码.

这也是在之前的代码中, 我们将代码封装成类的原因. 由于之前我们这样做了, 这个时候程序已经有了一个框架, 可以让我们使用实例变量.

在这个程序中, 我们会共享一点简单的信息: 上次调用的按钮的名字. 我们将它保存在'self.myLastButtonInvoked'中.

每当一个按钮处理函数被调用后, 就会将这个信息打印出来.

*代码示例*

这个程序中有三个按钮. 当程序运行时, 如果你按了其中的一个, 它就会显示出自己的名字, 还有上次点击的按钮的名字.

注意所有的按钮都不会关闭程序, 所以当你打算关闭程序时, 你必须用CLOSE控件(标题栏的右边的一个用'X'表示的按钮).

  1. from Tkinter import *

  2. class MyApp:
  3.     def __init__(self, parent):
  4.         
  5.         ### 1 -- At the outset, we haven
阅读(923) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~