Skip to main content
 首页 » 编程设计

TreeCtrl 右键单击时的 wxPython 弹出菜单

2024年07月26日33jirigala

我想要一个树控件,我可以右键单击以创建弹出菜单。单击项目菜单时,会发送一个事件,其中包含树中的 ItemData。我不知道该怎么做。到目前为止我所拥有的只是一个简单的弹出菜单生成

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

请您参考如下方法:

我在 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)