上面的这个空壳程序已经让我有了一个好的开始,不过除了用于教学这个程序几乎没什么用处。上面这个程序虽然简单但是难于扩展。
所以我们将扩展这个应用程序,给他添加一些方法和功能。列表1.2列出了我们将要进行的下一个迭代,我们将它命名位spare.py。
列表1.2 spare版本的空壳程序 |
#!/usr/bin/env python """Spare.py is a starting point for a wxPython program.""" import wx class Frame(wx.Frame): pass class App(wx.App): def OnInit(self): self.frame=Frame(parent=None,title="spare") self.frame.Show() self.SetTopWindow(self.frame) return True if __name__=='__main__': app=App() app.MainLoop()
|
这个版本的程序仍然很简单只有12行,但是我们为其增加了一些重要的部分。上面程序的第一行称为环境变量行。它类似于python的注释行,不过在某些操作系统中比如Linux/Unix操作系统中这行告诉操作系统python解析器的位置。如果这个文件的操作权限是可执行的,那么我们就可以通过命令行来运行这个文件:
spare.py
这行只会在类Unix系统和MacOS中被识别,其他操作系统会忽略它。尽管你可能不不会使用这些操作系统,但是为了保持平台无关性建议还是加上它。第二行是文档字符串它是文档的注释,最终被放在模块的__doc__属性中。Python的文档字符串为程序提供了内省的能力,我们建议你在模块、类和方法的内部尽量使用文档字符串。PyCrust等IDE工具可以有效的利用文档字符串为开发提供更多的信息。
在上面的程序中我们还改变了创建Frame对象的方法,较之bare中直接创建Frame对象不同,在这里我们创建了自己的Frame子类。这样的好处是你可以在Frame中增加其他组件。事实上当实际开发的时候你一般会建立一个单独的Frame模块以便可以扩展。
接下来我们在应用程序镇南关增加了frame对象的引用。就像例子中那样你会发现在增加一个对象属性是多么的简单。
之后我们在OnInit方法中调用了App类的SetTopWindow方法,它继承自是wx.App的方法,它告诉应用那个对象是应用程序的主窗口对象。一个wxPython程序中可以有多个窗口但是只能有一个主窗口,那么就可以通过上面的方法来设置那个是主窗口。
最后一部分是Python中的一种习惯用法,它用来判断那个模块是程序的主入口。我们通过判断模块的’__name__’属性来达到这个目的:
if __name__=='__main__':
app=App()
app.MainLoop()
如果要运行的模块已经导入那么它的’__name__’属性和文件名是相同的(不包括扩展名),比如:
>>> import spare
>>> spare.__name__
'spare
但是如果程序已经开始运行,但是模块没有导入,这时Python则使用缺省的名称,把模块的名称设置为缺省的‘__main__’,这样我们就有办法直接运行模块。我们利用这个特性将模块当作一个程序运行。
如果之前我们不错测试就直接运行的化会造成模块中的代码冲突,而且也难于测试。
No comments:
Post a Comment