wxPython学习笔记(二)

来源:互联网 发布:选车软件 编辑:程序博客网 时间:2024/06/05 23:56

应用程序对象的生命周期:

        wxPython应用程序对象的生命周期开始于应用程序实例被创建时,在最后一个应用程序窗口被关闭时结束。这个没有必要与wxPython应用程序所在的Python脚本的开始和结束相对应。Python脚本可以在wxPython应用程序创建之前选择做一动作,并可以在wxPython应用程序的MainLoop()退出后做一些清理工作。然而所有的wxPython动作必须在应用程序对象的生命周期中执行。这意味主框架对象在wx.App对象被创建之前不能被创建。(这就是为什么我们建议在OnInit()方法中创建顶级框架——因这样一来,就确保了这个应用程序已经存在。)

 如何定向wxPython程序的输出:

        所有的Python程序都能够通过两种标准流来输出文本:分别是标准输出流sys.stdout和标准错误流sys.stderr。通常,Python脚本定向标准输出流到它所运行的控制台。然而,当你的应用程序对象被创建时,你可以决定使用wxPython控制标准流并重定向输出到一个窗口。在Windows下,这个重定向行为是wxPython的默认行为.在所有的系统中,当应用程序对象被创建的时候,重定向行为可以被明确地指定。我们推荐利用这个特性并总是指定重定向行为来避免不同平台上的不同行为产生的任何问题.


下例同时演示了应用程序的生命周期和stdout/stderr重定向:

# -*- coding: utf-8 -*-"""    重定向"""import wximport sysclass Frame(wx.Frame):    """docstring for Frame"""    def __init__(self, parent, id, title):        print "Frame.__init__"        wx.Frame.__init__(self, parent, id, title)class App(wx.App):    """docstring for App"""    def __init__(self, redirect=True, filename=None):        print "App.__init__"        wx.App.__init__(self, redirect, filename)    def OnInit(self):        print "App.OnInit"   # 输出到stdout        self.frame = Frame(parent=None, id=-1, title='Startup')  # 创建框架        self.frame.Show()        self.SetTopWindow(self.frame)        print>>sys.stderr, "A pretend error message"  # 输出到ststderr        return True    def OnExit(self):        print "OnExit"if __name__ == '__main__':    app = App(redirect=False)  # 文本重定向从这里开始    print "before MainLoop"    app.MainLoop()  # 进入主事件循环    print "after MainLoop"# This is the end


以上均摘录于《wxPython in action》

0 0
原创粉丝点击