Элемент wx.TreeCtrl - PullRequest
       46

Элемент wx.TreeCtrl

0 голосов
/ 12 мая 2011

Я пытаюсь использовать TreeCtrl для представления структуры папок. Для каждой папки мне нужно знать ее абсолютный путь и имя. В настоящее время я делаю что-то вроде этого:

self.root = self.tree.AddRoot(project.name)
self.tree.SetPyData(self.root, None)
self.root.path = root 

---- other code -----

childItem = self.tree.AppendItem(self.root, child.name)
childItem.path = self.root.path + "/" +  child.name

Но теперь для события мне нужно получить строку пути. Пока что мой подход, который терпит неудачу:

self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, self.tree)

----- other code -------

def OnItemExpanded(self, evt):
    selected = evt.GetItem()
    print selected.path

Теперь это не удается, потому что: AttributeError: у объекта TreeItemId нет атрибута path. Из того, что я понимаю здесь, событие дает мне только идентификатор элемента из дерева, а не фактический элемент, полученный в результате «childItem = self.tree.AppendItem (self.root, child.name)»? Если это так, как я могу добраться до этого предмета?

С уважением, Богдан

1 Ответ

1 голос
/ 12 мая 2011

Что такое свойство .path?Это то, что вы создаете, или фактический член объекта TreeItemId (это объект, возвращаемый методом "AppendItem")?Я не вижу никаких документов на нем.

Если вы хотите хранить произвольные данные в дочерних элементах, используйте методы SetPyData / GetPyData.

childItem = self.tree.AppendItem(self.root, child.name)
self.tree.SetPyData(childItem, ["hi", "i" , "am", "a", "python", "object"])

Затем в вашем обработчике:

def OnItemExpanded(self, event):
    item = event.GetItem()
    if item:
        pyObj = self.tree.GetPyData(item)
...