Wednesday, August 16, 2006

WxPython 编程指南 1.2.2 开发应用程序和框架窗口

一旦你导入了wx包,你就可以创建应用程序和框架窗口了。每个wxPython程序必须有一个应用程序对象和至少一个框架窗口对象。这些对象我们会在后续讲解中详细介绍。现在你只需知道应用程序对象必须是wx.App的一个实例或者是定义了OnInit方法的wx.App子类。当应用程序开始运行的时候父类将调用子类的OnInit方法。

子类化wxPython应用程序。

下面是定义我们的wx.App子类的方法:

class MyApp(wx.App):

def OnInit(self):

frame = wx.Frame(parent=None, id=-1, title="Bare")

frame.Show()

return True

我们将类命名位“MyApp”,通常OnInit方法是你创建框架窗口对象的方法。但是,你一般不需要象我们上面的代码那样直接创建frame对象。替代的方法是创建一个wx.Frame的子类,就像我们创建MyApp那样(你会在随后的讲解中看到相关的例子)。随后的章节会详细介绍wx.Frame,现在我们只要给它传入几个简单的参数直接创建一个frame对象就可以了。上面例子中的三个参数只有第一个是必须的,其它参数都有默认值。

调用Show方法之后就可以创建并显示一个窗口,我们还可以通过输入不同的Show方法参数来控制框架窗口的显示:

frame.Show(False) # 不显示框架窗口.

frame.Show(True) # True 是缺省的参数.

frame.Hide() # 等同与Show(False).

定义应用程序初始化方法。

注意,我们没有在应用程序中定义__init__方法。在Python程序中这意味着父类wx.App.__init__方法会在应用程序创建的时候自动调用。这是好事,但是如果你定义了一个__init__方法记得调用父类的__init__方法,就像下面这样:

class App(wx.App):

def __init__(self):

# Call the base class constructor.

wx.App.__init__(self)

# Do something here...

如果你忘了调用父类的__init__方法,那么应用程序将不能被初始化而起OnInit方法也不会被调用。
创建应用程序实例并进入主事件循环

最后一步是创建子类化wx.App的实例,然后调用它的MainLopp()方法。

app = App()

app.MainLoop()

好了,一旦程序的MainLoop开始执行,控制权就交给了wxPython。与普通的程序不同,一个wxPython GUI程序主要由相关的各种事件控制,任何响应都取决于用户鼠标或者键盘的动作。当应用程序中的所有窗口都关闭之后,MainLoop方法会返回一个值,程序也将退出。

No comments: