2016-08-17 3 views
1

Я хотел бы иметь дерево управления, где я могу щелкнуть правой кнопкой мыши, чтобы создать всплывающее меню. Когда щелкнуто меню элемента, после этого отправляется событие, которое содержит ItemData из дерева. Я понятия не имею, как это сделать. Все, что я до сих пор это простое всплывающее меню поколенияwxPython Popupmenu на TreeCtrl правой кнопкой мыши

# 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) 

Как я могу получить TreeCtrl Itemdata от TreeEvent? Как только у меня есть эти данные, мне нужно специальное событие, чтобы связать его?

Редактировать: Ну, получая данные об изделии, обходным путем.

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

ответ

1

Ну, я помог irc. Как только я получил данные элемента, я просто использовал лямбда для обертывания одного обработчика событий

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) 
Смежные вопросы