[XML-SIG] PyDOM and wxTreeView
Sean McGrath
sean@digitome.com
Tue, 06 Jul 1999 16:41:36 +0100
At 06:57 06/07/99 -0800, you wrote:
>
> Has anyone written a Python TreeView on top of
>PyDOM?
> Maybe wxTreeView?
>
Not DOM but here is a basic one for wxWindows that uses pyExpat.
Sean
--------------
"""
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
<Sean URI="http://www.digitome.com/sean.html">
Developers Day Co-Chair, 9th International World Wide Web Conference
16-19, May, 2000, Amsterdam, The Netherlands http://www9.org
</Sean>