wxPython程序所必须的五个基本步骤:

1.导入必须的wxPython包
2.子类化wxPython应用程序类(*注:书上说是必须子类化,不过我试验直接实例化wx.App也是可以的)
3.定义一个应用程序的初始化方法
4.创建一个应用程序类的实例
5.进入应用程序的主事件循环(MainLoop())

有两种方式导入wxPython包:老的方式和新的方式:

老的方式包名叫wxPython,可以用from wxPython import wx或者from wxPython.wx from *来导入。老的方式符合wxWidgets的命名规范,也就是所有类都以wx前缀开头。

新的方式包名叫wx,可以用import wx来导入。新的方式中对命名进行了简化,所有的命名都去掉了wx前缀,因为包名中已经有wx了,所以以前用wx.wxApp的地方,现在简化为了wx.App。

在从wxPython导入其它东西之前必须先导入wx,比如导入xrc,需要import wx; from wx import xrc;

在wxPython应用程序妄动时,App类的OnInit方法会被调用,原型是def OnInit(self),一般会在OnInit中创建并显示顶层窗口。OnInit必须返回True或者False表示初始化是否成功,返回False的话,应用程序不会继续执行。

wx.App能够重定向sys.stdout和sys.stderr的输出,默认情况下它会输出到控制台。但是wx.App类的构造函数有两个参 数,第一个参数是redirect,如果值为True,那么输出会被重定向到一个窗口,默认值是False,会输出到控制台,第二个参数是 filename,如果参数redirect为True,并且filename参数也被设置了,那么会重定向到filename指定的文件中。

当应用程序的所有顶级窗口被用户关闭时,wxPython就退出。在退出之前wx.App子类的OnExit方法会被调用,所以可以定义OnExit这个钩子来执行清理工作。即使使用了wx.Exit()来关闭wxPython程序,OnExit方法仍然会被触发。

可以使用wx.App类的SetExitOnFrameDelete(flag)来改变默认行为,如果flag设置为False,则最后的窗口关闭后wxPython程序仍然继续运行,直到wx.Exit()被调用。

也可以用wx.App类的ExitMainLoop()方法和全局的wx.Exit()方法来紧急退出程序,不过不被推荐,因为它将导致一些清理函数被跳过。

wxPython应用程序至少必须有一个顶级窗口,可以是wx.Frame或者wx.Dialog的子类,顶级窗口是指没有任何父窗口的窗口,可以 使用SetTopWindow来设置主顶级窗口,如果没设置的话那么wx.App的顶级窗口列表中的第一个框架被认为是主顶级窗口。

wxFrame的构造器:

wx.Frame(parent, id = -1, title = "", pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "frame")
parent:框架的父窗口,顶级窗口的话设置为None
id:新窗口的ID号,传递-1的话,wxPython会自动生成一个新的,可以用GetId()来得到,全局函数wx.NewId()会自动生成不重复的一个新ID
title:标题
pos:一个wx.Point对象,指定新窗口的左上角在屏幕上的位置。通常(0, 0)是显示器左上角,默认的(-1, -1)将让系统决定窗口位置。wx.Point对象可以用Set(x, y)和Get()来取值和设值,Get()返回一个元组,也可以直接访问wx.Point的x和y属性。需要时一个元组会自动转化为wx.Point对象
size:一个wx.Size对象,指定窗口的初始大小,默认的(-1, -1)将让系统决定窗口的初始大小。wx.Size和wx.Point几乎完全相同,除了属性名变为了width和height。
style:窗口的类型,可以用或运行来组合。一些比较重要的样式如下:wx.CAPTION, wx.CLOSE_BOX, wx.DEFAULT_FRAME_STYLE, wx.FRAME_TOOL_WINDOW, wx.MAXIMIZE_BOX, wx.MINIMIZE_BOX, wx.RESIZE_BORDER, wx.SIMPLE_BORDER, wx.SYSTEM_MENU
name:框架的内在名字,可以用它来寻找窗口

对于wx.Frame,一般情况会创建一个和Frame一样大小的wx.Panel来容纳框架上的内容,这样可以窗口内容与工具栏状态栏等分开,通过tab近包,可以遍历wx.Panel中的元素,wx.Frame不能。

创建一个子窗口时指定了父窗口,那么这个子窗口就隐式地增加到父对象中了,不需要再显式地加入,比如:button = wx.Button(panel, label = "Close", pos = (125, 10), size = (50, 50))

wxPython的一些事件:

wx.EVT_BUTTON:按钮单击事件
wx.EVT_CLOSE:窗口关闭事件

wxPython的一些预定义对话框:

消息对话框:wx.MessageDialog(parent, message, caption = "Message box", style = wx.OK 按位或 wx.CANCEL, pos = wx.DefaultPosition)
文本输入对话框:wx.TextEntryDialog(parent, message, caption = "Please enter text, initialContent = "",)
单选对话框:wx.SingleChoiceDialog(None, message, caption = "Single Choice", [value1, value2...])

Bind()方法是wx.EvtHandler的一个方法,wx.EvtHandler是所有可显示对象的父类,所以Bind可以被放置在任何显示 类。Bind的用法:Bind(event, handler, source = None, id = wx.ID_ANY, id2 = wx.ID_ANY)