2013-04-03 39 views
0

我正在做一個樹ctrl,需要找出雙擊來自哪裏。wxpython wx.TreeCtrl,樹的哪個子項引發事件wx.EVT_TREE_ITEM_ACTIVATED?

代碼:

def _initElementsOfTreePanel(self, panel): 
    tree = wx.TreeCtrl(panel, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER | wx.TR_DEFAULT_STYLE) 

    root = tree.AddRoot("Elements") 
    items = [] 
    imglist = wx.ImageList(16, 16, True, 2) 
    imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16, 16))) 
    imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16, 16))) 
    tree.AssignImageList(imglist) 

# #  Create the element Tree (the left hand side panel). Places in it all the found functions 
    def appendSubitems(item, func_list, tree): 
     print item 
     for func in func_list: 
      itemid = tree.AppendItem(item, func.__name__, 1) 
      print"GUIFrame._initElementsofTreePanel, func:",func.__name__,"id:",itemid 

#  print "TreeItemId:", 
    appendSubitems(tree.AppendItem(root, "Input functions", 0), self._elemdisco.input_functions, tree) 
    appendSubitems(tree.AppendItem(root, "Processing functions", 0), self._elemdisco.processing_functions, tree) 
    appendSubitems(tree.AppendItem(root, "Output functions", 0), self._elemdisco.output_functions, tree) 
    appendSubitems(tree.AppendItem(root, "Other functions", 0), self._elemdisco.other_functions, tree) 


    tree.ExpandAll() 
    self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self._addNodeToSchema, self.treePanel.tree) 

def _addNodeToSchema(self,event): 
    print event.GetItem() 

現在的輸出顯示,無論在什麼節點雙擊,它認識到同一項目已觸發事件。並且它對應於我知道我已添加的任何項目的任何ID,並且沒有根的ID。

任何人都知道我可以如何獲得對樹中的對象的引用?我基本上想知道它的名字,但這個API不會讓我:P

[編輯]:求解器,但我認爲這是一個框架錯誤。沒有理由不管雙擊實際發生在哪裏,事件應該返回相同的TreeItemID。

回答

1
def _addNodeToSchema(self,event): 
    pt = event.GetPoint() 
    item, _ = self.treePanel.tree.HitTest(pt) 
    if item:   
     print self.treePanel.tree.GetItemText(item) #this is the label of the node 

顯然必須得到點的位置,並詢問它已經可以在該位置找到的任何元素:)不是很OO樹,但我會接受它。