""" Build a GUI Tree (wxWindows) from an XML file using pyExpat """ import sys,string from xml.parsers import pyexpat from wxPython.wx import * class MyFrame(wxFrame): def __init__(self, parent, id, title): wxFrame.__init__(self, parent, id, title, wxPoint(100, 100), wxSize(160,100)) menu = wxMenu() menu.Append (1001,"Open") menu.Append (1002,"Close") menu.Append (1003,"Exit") menubar = wxMenuBar() menubar.Append (menu,"File") self.SetMenuBar(menubar) class MyApp(wxApp): def OnInit(self): self.frame = MyFrame(NULL, -1, "Tree View of XML") self.tree = wx.wxTreeCtrl(self.frame, -1) EVT_MENU(self, 1001, self.OnOpen) EVT_MENU(self, 1002, self.OnClose) EVT_MENU(self, 1003, self.OnExit) self.frame.Show(true) self.SetTopWindow(self.frame) return true def OnOpen(self,event): f = wxFileDialog(self.frame,"Select a file",".","","*.xml",wxOPEN) if f.ShowModal() == wxID_OK: LoadTree(f.GetPath()) def OnClose(self,event): self.tree = wx.wxTreeCtrl(self.frame, -1) pass def OnExit(self,event): self.OnCloseWindow(event) def OnCloseWindow(self, event): self.frame.Destroy() NodeStack = [] # Define a handler for start element events def StartElement( name, attrs ): global NodeStack NodeStack.append(app.tree.AppendItem(NodeStack[-1],name)) def EndElement( name ): global NodeStack NodeStack = NodeStack[:-1] def CharacterData ( data ): global NodeStack if string.strip(data): app.tree.AppendItem(NodeStack[-1],data) def LoadTree (f): print f # Create a parser Parser = pyexpat.ParserCreate() # Tell the parser what the start element handler is Parser.StartElementHandler = StartElement Parser.EndElementHandler = EndElement Parser.CharacterDataHandler = CharacterData # Parse the XML File ParserStatus = Parser.Parse(open(f,'r').read(), 1) if ParserStatus == 0: print "oops!" raise SystemExit app = MyApp(0) NodeStack = [app.tree.AddRoot("Root")] app.MainLoop() raise SystemExit