大多数情况下,你会想要定制应用程序的主框架,所以使用普通的wxFrame是不够的。你可能希望,从wxFrame派生出自已的类进行定制。下一个例子定义了一个框架类,并且在应用程序中的O nInit方法中创建了一个实例。注意除了在OnInit中创建的类的名字,MyApp代码的其它部分同以前的例子是一样的。这个代码的显示结果如图2 。
[myphp]
from wxPython.wx import *
ID_ABOUT = 101
ID_EXIT = 102
class MyFrame(wxFrame):
def __init__(self, parent, ID, title):
wxFrame.__init__(self, parent, ID, title,
wxDefaultPosition, wxSize(200, 150))
self.CreateStatusBar()
self.SetStatusText("This is the statusbar")
menu = wxMenu()
menu.Append(ID_ABOUT, "&About",
"More information about this program")
menu.AppendSeparator()
menu.Append(ID_EXIT, "E&xit", "Terminate the program")
menuBar = wxMenuBar()
menuBar.Append(menu, "&File");
self.SetMenuBar(menuBar)
class MyApp(wxApp):
def OnInit(self):
frame = MyFrame(NULL, -1, "Hello from wxPython")
frame.Show(true)
self.SetTopWindow(frame)
return true
app = MyApp(0)
app.MainLoop()
图2 一个带菜单的wxPython程序
[/myphp]
这个例子显示了一些wxFrame内建的一些功能。例如,为框架创建一个状态条只要简单地调用一个方法。框架本身会自动地管理它的位置,大小,和绘制。另一方面,如果你想定制状态条,从你自已的w xStatusBar派生类创建实例,并将其附加到框架上。
在这个例子中也演示了创建一个简单的菜单条和一个下拉菜单。期待的菜单功能全部都支持:层叠子菜单,可核选的项,弹出菜单等等;你要做的只是创建一个菜单对象,向它追加菜单项。菜单项可以是象这里显示的文本,或其它的菜单。每一项你可以有选择地指定一些简单的帮助性文本,就象我们所做的。当菜单项被选中,这些文本会自动地显示在状态条上。