Get absolut Pah in TreeCtrl

Plattformunabhängige GUIs mit wxWidgets.
Antworten
coffeepig
User
Beiträge: 3
Registriert: Donnerstag 13. November 2008, 09:21

Hallo,zusammen
Ich habe eine Frage über TreeCtrl

Ich habe eine Tree wie z.B
a
...b
...c
ich möchte jetzt die absolute Path von Item bekommen, wie z.B wenn ich die item C auswähle, dann werde ich eine String wie '/a/b/c' bekommen, änhlich wie Linux Befehl 'Pwd',

hier ist meine Code:

Code: Alles auswählen

import wx


class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="simple tree", size=(400,500))

        # Create the tree
        self.tree = wx.TreeCtrl(self)

        # Add a root node
        root = self.tree.AddRoot("a")
        b = self.tree.AppendItem(root, 'b')
        self.tree.AppendItem(b, 'c')



        # Bind some interesting events
        self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, self.tree)
        self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, self.tree)
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree)
        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivated, self.tree)

        # Expand the first level
        self.tree.Expand(root)


    def AddTreeNodes(self, parentItem, items):
        pass
        

                
    def GetItemText(self, item):
        if item:
            return self.tree.GetItemText(item)
        else:
            return ""
        
    def OnItemExpanded(self, evt):
        print "OnItemExpanded: ", self.GetItemText(evt.GetItem())
        
    def OnItemCollapsed(self, evt):
        print "OnItemCollapsed:", self.GetItemText(evt.GetItem())

    def OnSelChanged(self, evt):
        print "OnSelChanged:   ", self.GetItemText(evt.GetItem())

        bb = evt.GetItem()

        print self.GetName(bb)

    def OnActivated(self, evt):
        print "OnActivated:    ", self.GetItemText(evt.GetItem())


    def GetName(self,item):
        result=[]

        a = self.tree.GetItemParent(item)
        b = self.GetItemText(a)
        result.append(b)
        if b!='':
            sub = self.GetName(a)
            if sub!=[]:
                result.append(sub)
        return result


app = wx.PySimpleApp(redirect=True)
frame = TestFrame()
frame.Show()
app.MainLoop()
Bis jetzt kriege ich eine List
  • [u'b', [u'a', ['']]]
, d.h ich brauche noch eine Rekursion machen um eine String wie '/a/b/c' zu erzeugen.
Also ich denke das ist aber sehr umständlich, habt ihr vieleicht eine besser Methode?

Grüßen
Antworten