如何在wxPython中获取选定的菜单项?

jmc*_*ell 5 python wxpython

在我的程序中,我有一个包含插入子菜单的上下文菜单。我不想为子菜单中的每个选项创建不同的函数,而是想将所有选项绑定到同一个函数。有没有办法让我确定所选项目的标签或 ID,以便我可以将其传递给不同的函数?

编辑:经过一番研究,我找到了函数 GetId(),这就是我想要的,但我仍然需要从 id 中获取标签。我也许可以使用 FindWindowById,它是 wx.Window 的函数,但它只能查看窗口的子窗口。该框架似乎不是子菜单中项目的父级,所以我不能只是这样做frame.FindWindowById(id)

小智 2

使用partial 将选项(一些唯一的ID)发送到公共函数。如果您有很多菜单项,请使用 for() 循环,将返回值存储在列表中(而不是 menu_item_x),并增加一个计数器以发送到该函数。

import wx
from functools import partial

class MenuCallback(object):

    def __init__(self, parent, id):
        self.frame=wx.Frame(None)
        menu_bar = wx.MenuBar()
        menu1 = wx.Menu()
        menu_item_1 = menu1.Append(-1, "&Option #1")
        menu_item_2 = menu1.Append(-1, "&Option #2")
        menu_item_3 = menu1.Append(-1, "&Exit...")

        menu_bar.Append(menu1, "&File")
        self.frame.SetMenuBar(menu_bar)
        self.frame.Bind(wx.EVT_MENU, partial(self.option_chosen, 1),
                        menu_item_1)
        self.frame.Bind(wx.EVT_MENU, partial(self.option_chosen, 2),
                        menu_item_2)
        self.frame.Bind(wx.EVT_MENU, self.on_close, menu_item_3)

        self.frame.Show(True)

    def option_chosen(self, number, event):
        print "option chosen =", number

    def on_close(self, event):
        self.frame.Close(True)

app = wx.PySimpleApp()
MC=MenuCallback(parent=None, id=-1)
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)