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

全部博文(26)

文章存档

2012年(4)

2011年(19)

2010年(3)

我的朋友

分类: Python/Ruby

2011-04-21 14:34:56

PS: 靠了...居然漏翻了一篇...补在这儿吧...

*使用class来组织*

在这个程序中, 我们用类来组织一个tkinter程序.

在这个程序中, 我们来添加一个类MyApp, 再把之前程序中的一些代码挪到构造函数(__init__)里. 在这个程序的重构版本中, 我们主要干了3件事:

(1)
在代码中, 我们先定义一个类(MyApp), 它封装了程序的界面组成部分. 它定义了程序最后长啥样, 同时也完成了我们想干的事. 所有这些咱都丢__init__里. (1a)

(2)
当程序运行时, 第一件事就是创建一个类的实例. 就是下面这句:

myapp = MyApp(root)

在这儿注意类名是"MyApp"(注意首字母), 而实例名我们用的是"myapp"(首字母没大写).

另外这句将root传给了MyApp的__init__方法. 构造函数会将它命名为"myParent". (1a)

(3)
最后, 咱运行root的mainloop.

*为啥用类来组织你的程序*

其中一个原因是因为它可以更容易的控制你的程序. 一个程序按类来组织可能 -- 特别是大程序 -- 比不用要更容易理解.

另外一个很重要的原因是用类来组织可以避免使用全局变量. 最后, 随着程序变大, 你很可以希望在几个事件处理器中来共享一些数据. 一种方法是使用全局变量, 但这样也太挫了. 一个更好的办法封装成类, 并用实例(也就是"self."这个变量)来访问. 在这个系列的后面, 我们会再来讲这个问题.

*啥时候用类呢*

为了解释为啥用类来组织程序以及如何推广到其他情况下, 我们已经在前面从概念上讲了一下. 但在实际的开发过程中, 你可能会不这么干.

有很多情况, 一个tkinter程序都是从一个小脚本开始的. 所有这些程序都如我们之前写的那些一样, 都是不组织的. 当你有一个新点子时, 你会去扩充原有的代码. 过了一段时间, 你就会有一大坨代码. 你可能一开始只用一些全局变量, 但这时估计就会变成一大坨全局变量. 代码也开始变得难于理解和修改. 当你有这种感觉时, 说明你应该重构一下你的程序了, 用类来重构.

另外, 当你适应了类, 并且对你的程序有了一个最终的构思后, 你很可能就会从头开始用类重写一遍.

但另外(靠, 另外的另外, 绕回来了?), 在开发早期你经常会用不知如何用类来最好的组织代码的感觉 -- 其实还是因为你对要解决的问题没有一个清晰的认识. 过早的使用类来组织很可能会导致代码零乱, 妨碍理解, 最终导致更多的重构.

所以这个完全是凭个人的品味和经验来的. 只干你觉得不错的, 并且 -- 不管你怎么做 -- 在你觉得有必要时不要害怕重构.

*代码示例*

当程序运行时, 它看上去与前一个程序非常像. 其实确实没加啥功能, 只是把代码重新组织了一下而已.

  1. from Tkinter import *

  2. class MyApp: ### (1)
  3.     def __init__(self, myParent): ### (1a)
  4.         self.myContainer1 = Frame(myParent)
  5.         self.myContainer1.pack()
  6.         
  7.         self.button1 = Button(self.myContainer1)
  8.         self.button1["text"]= "Hello, World!"
  9.         self.button1["background"] = "green"
  10.         self.button1.pack()    
  11.         
  12. root = Tk()
  13. myapp = MyApp(root) ### (2)
  14. root.mainloop() ### (3)
阅读(666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~