2016-08-17 92 views
1

我想要一個樹形控件,我可以右鍵單擊創建一個彈出式菜單。當單擊一個項目菜單時,會發送一個事件,其中包含樹中的ItemData。我不知道如何去做這件事。所有我至今是一個簡單的彈出菜單代wxPython在TreeCtrl上的Popupmenu右鍵單擊

# Panel 

def __init__(self, ...): 
    # ... 
    self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnRightClick) 

def OnRightClick(self, event): 
    popupmenu = wx.Menu() 
    entries = ['One', 'Two'] 
    for entry in entries: 
     menuItem = popupmenu.Append(-1, entry) 

我怎樣才能從TreeEvent的TREECTRL的ItemData?獲得這些數據後,是否需要自定義事件才能將其附加到?

編輯:得到項目數據是一個迂迴的方式。

item = event.GetItem() 
itemData = self.tree.GetItemData(item).GetData() 

回答

1

那麼我對irc有一些幫助。一旦我得到物品數據,我只用lambda來包裝一個事件處理程序

def OnRightClick(self, event): 
    """Setup and Open a popup menu.""" 
    # Get TreeItemData 
    item = event.GetItem() 
    itemData = self.tree.GetItemData(item).GetData() 
    # Create menu 
    popupmenu = wx.Menu() 
    entries = ['One', 'Two'] 
    for entry in entries: 
     menuItem = popupmenu.Append(-1, entry) 
     wrapper = lambda event: self.OnStuff(event, itemData) 
     self.Bind(wx.EVT_MENU, wrapper, menuItem) 

    # Show menu 
    self.PopupMenu(popupmenu, event.GetPoint()) 

def OnStuff(self, event, data=None): 
    myEvent = events.myCustomEvent(self.GetId(), data=data) 
    wx.PostEvent(self, myEvent)