一旦你导入了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:
Post a Comment