现在我们将给空的最小程序增加适当数量的功能,它包含了通常Python编程的标准并能够作为你自己的程
序的一个基准。下面我们创建一个名为spare.py程序:
#!/usr/bin/env python #1
"""Spare.py is a starting point for a wxPython program.""" #2
import wx
class Frame(wx.Frame): #3
pass
class App(wx.App):
def OnInit(self):
self.frame = Frame(parent=None, title='Spare') #4
self.frame.Show()
self.SetTopWindow(self.frame) #5
return True
if __name__ == '__main__': #6
app = App()
app.MainLoop()
这个程序仍然很小,只有14行代码,但是它增加了几个重要的项目让我们考虑到什么样的代码是好的,完
整的。
#1 这行看似注释,但是在如linux和unix等操作系统上,它告诉操作系统如何找到执行程序的解释器。如
果这个程序被给予的可执行权限(例如使用chmod命令),我们可以在命令行下仅仅键入该程序的名字来
运行这个程序:
% spare.py
这行在其它的操作系统上将被忽略。但是包含它可以实现代码的跨平台。
#2 这是文档字符串,当模块中的第一句是字符串的时候,这个字符串就成了该模块的文档字符串并存储
在该模块的__doc__属性中。你能够在你的代码中、某些开发平台、甚至交互模式下运行的Python解释器
中访问文档字符串:
>>> import spare
>>> print spare.__doc__
Spare.py is a starting point for simple wxPython programs.
>>>
#3 我们改变了你们创建frame对象的方法。bare版的程序简单地创建了一个wx.Frame类的实例。在spare
版中,我们定义了我们自己的Frame类作为wx.Frame的子类。此时,最终的结果没有什么不同,但是如果
你想在你的框架中显示诸如文本、按钮、菜单的话,你可能就想要你自己的Frame类了。
#4 我们将对frame实例的引用作为应用程序实例的一个属性
#5 在OnInit()方法中,我们调用了这个App类自己的SetTopWindow()方法,并传递给它我们新创建的
frame实例。我们不必定义SetTopWindow()方法,因为它继承自wx.App父类。SetTopWindow()方法是一个
可选的方法,它让wxPython方法知道哪个框架或对话框将被认为是主要的。一个wxPython程序可以有几个框架
,其中有一个是被设计为应用程序的顶级窗口的。
#6 这个是Python中通常用来测试该模块是作为程序独立运行还是被另一模块所导入。我们通过检查该模
块的__name__属性来实现:
if __name__ == '__main__':
app = App()
app.MainLoop()
文章来源:www.pythontik.com