X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..f81ef370c41cc15adde9c0848fb5688adcbd2615:/wxPython/demo/pyTree.py diff --git a/wxPython/demo/pyTree.py b/wxPython/demo/pyTree.py index 47283527f1..24892a90b1 100644 --- a/wxPython/demo/pyTree.py +++ b/wxPython/demo/pyTree.py @@ -23,8 +23,10 @@ sample not because it's used, but because it's so beautifully documented... """ -from wxPython import wx -import string # Don't use it, but it's fun expanding :-) +import string # Used for demo purposes, nothing more. :-) +import sys + +import wx #---------------------------------------------------------------------- @@ -47,8 +49,10 @@ def _sourcefinder(func): for i in range(func.co_firstlineno): line = f.readline() + ind = _getindent(line) msg = "" + while line: msg = msg + line line = f.readline() @@ -56,13 +60,14 @@ def _sourcefinder(func): # confused by multiline docstrings. Using == works most of # the time... but not always! if _getindent(line) == ind: break + return msg #---------------------------------------------------------------------- -class pyTree(wx.wxTreeCtrl): +class pyTree(wx.TreeCtrl): """ - This wxTreeCtrl derivative displays a tree view of a Python namespace. + This wx.TreeCtrl derivative displays a tree view of a Python namespace. Anything from which the dir() command returns a non-empty list is a branch in this tree. """ @@ -75,14 +80,18 @@ class pyTree(wx.wxTreeCtrl): SEL_CHANGED handler attempts to display interesting information about the selected object. """ - wx.wxTreeCtrl.__init__(self, parent, id) - self.root = self.AddRoot(str(root), -1, -1, wx.wxTreeItemData(root)) + wx.TreeCtrl.__init__(self, parent, id) + self.root = self.AddRoot(str(root), -1, -1, wx.TreeItemData(root)) + if dir(root): - self.SetItemHasChildren(self.root, wx.TRUE) - wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding) - wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed) - wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged) + self.SetItemHasChildren(self.root, True) + + self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnItemExpanding, id=self.GetId()) + self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=self.GetId()) + self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=self.GetId()) + self.output = None + self.Expand(self.root) def SetOutput(self, output): @@ -111,14 +120,20 @@ class pyTree(wx.wxTreeCtrl): will again figure out what the offspring is. """ item = event.GetItem() + + if self.IsExpanded(item): # This event can happen twice in the self.Expand call + return + obj = self.GetPyData( item ) lst = dir(obj) + for key in lst: new_obj = getattr(obj,key) new_item = self.AppendItem( item, key, -1, -1, - wx.wxTreeItemData(new_obj) ) + wx.TreeItemData(new_obj) ) + if dir(new_obj): - self.SetItemHasChildren(new_item, wx.TRUE) + self.SetItemHasChildren(new_item, True) def OnItemCollapsed(self, event): """ @@ -137,16 +152,22 @@ class pyTree(wx.wxTreeCtrl): """ if not self.output: return + obj = self.GetPyData( event.GetItem() ) msg = str(obj) + if hasattr(obj, '__doc__'): msg = msg+"\n\nDocumentation string:\n\n%s" % ( getattr(obj, '__doc__'),) + # Is it a function? func = None + if hasattr(obj, "func_code"): # normal function func = getattr(obj, "func_code") + elif hasattr(obj, "im_func"): # unbound class method func = getattr(getattr(obj, "im_func"), "func_code") + if func: # if we found one, let's try to print the source msg = msg+"\n\nFunction source:\n\n" + _sourcefinder(func) @@ -161,16 +182,15 @@ def runTest(frame, nb, log): This method is used by the wxPython Demo Framework for integrating this demo with the rest. """ - thisModule = __import__(__name__, globals()) - win = wx.wxFrame(frame, -1, "PyTreeItemData Test") - split = wx.wxSplitterWindow(win, -1) + thisModule = sys.modules[__name__] + win = wx.Frame(frame, -1, "PyTreeItemData Test") + split = wx.SplitterWindow(win, -1) tree = pyTree(split, -1, thisModule) - text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition, - wx.wxDefaultSize, wx.wxTE_MULTILINE) + text = wx.TextCtrl(split, -1, "", style=wx.TE_MULTILINE) split.SplitVertically(tree, text, 200) tree.SetOutput(text.SetValue) tree.SelectItem(tree.root) - win.SetSize(wx.wxSize(800,500)) + win.SetSize((800,500)) frame.otherWin = win win.Show(1) @@ -179,33 +199,31 @@ def runTest(frame, nb, log): #---------------------------------------------------------------------- if __name__ == '__main__': - class MyFrame(wx.wxFrame): + class MyFrame(wx.Frame): """Very standard Frame class. Nothing special here!""" def __init__(self): """Make a splitter window; left a tree, right a textctrl. Wow.""" import __main__ - wx.wxFrame.__init__(self, wx.NULL, -1, "PyTreeItemData Test", - wx.wxDefaultPosition, wx.wxSize(800,500)) - split = wx.wxSplitterWindow(self, -1) + wx.Frame.__init__(self, None, -1, "PyTreeItemData Test", size=(800,500)) + split = wx.SplitterWindow(self, -1) tree = pyTree(split, -1, __main__) - text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition, - wx.wxDefaultSize, wx.wxTE_MULTILINE) + text = wx.TextCtrl(split, -1, "", style=wx.TE_MULTILINE) split.SplitVertically(tree, text, 200) tree.SetOutput(text.SetValue) tree.SelectItem(tree.root) - class MyApp(wx.wxApp): + class MyApp(wx.App): """This class is even less interesting than MyFrame.""" def OnInit(self): """OnInit. Boring, boring, boring!""" frame = MyFrame() - frame.Show(wx.TRUE) + frame.Show(True) self.SetTopWindow(frame) - return wx.TRUE + return True - app = MyApp(0) + app = MyApp(False) app.MainLoop()