从wxPython菜单栏中删除菜单

从wxPython菜单栏中删除菜单,python,wxpython,menubar,Python,Wxpython,Menubar,我创建了一个菜单栏,并在其上附加了许多菜单对象 现在我想删除其中一个菜单,只引用附加的菜单对象,而不知道或关心菜单的位置和标签 这似乎是一件微不足道的事情,但API似乎不是为处理它而构建的;所有方法都基于位置和标签 存在一个MenuBar.Remove()方法,但它将位置作为参数。没有方法接受菜单并返回其位置 菜单和菜单栏上的Detach()方法没有文档记录,显然不起任何作用 我确信这是一个愚蠢的问题,而且解决方案是显而易见的,因为我以前找不到任何人问过这个问题,但我找不到解决方案。您可以查看以

我创建了一个菜单栏,并在其上附加了许多菜单对象

现在我想删除其中一个菜单,只引用附加的菜单对象,而不知道或关心菜单的位置和标签

这似乎是一件微不足道的事情,但API似乎不是为处理它而构建的;所有方法都基于位置和标签

存在一个MenuBar.Remove()方法,但它将位置作为参数。没有方法接受菜单并返回其位置

菜单和菜单栏上的Detach()方法没有文档记录,显然不起任何作用


我确信这是一个愚蠢的问题,而且解决方案是显而易见的,因为我以前找不到任何人问过这个问题,但我找不到解决方案。

您可以查看以下示例:

# -*- coding: utf-8 -*-
import wx

class wxTest(wx.Frame):
    def __init__(self,parent,title):
        wx.Frame.__init__(self,parent,title=title,size=(150,100))
        self.button=wx.Button(self, -1, "Remove")
        self.init_menu() # 

        self.Bind(wx.EVT_BUTTON, self.remove_menu, self.button)
        self.sz = wx.BoxSizer(wx.VERTICAL)
        self.sz.Add(self.button, 1, wx.EXPAND | wx.ALL, 10)
        self.SetSizer(self.sz)
        self.Show()

    def init_menu(self):
        self.mfile = wx.Menu()
        self.medit = wx.Menu()

        self.menubar = wx.MenuBar()
        self.menubar.Append(self.mfile, "File")
        self.menubar.Append(self.medit, "Edit")
        self.SetMenuBar(self.menubar)

    def remove_menu(self,event):
        toRemove = self.mfile # Remove self.mfile
        posm = self.menubar.FindMenu(toRemove.GetTitle())
        # posm is the menu "position"
        if posm >= 0:
            self.menubar.Remove(posm)


if __name__=='__main__':
    app=wx.App()
    frame=wxTest(None,"Test Menu")
    app.MainLoop()
要删除“文件”菜单,如果菜单不存在,其位置将返回为-1

menuBarPos = self.menuBar.FindMenu('File')
if menuBarPos >= 0:
   self.menuBar.Remove(menuBarPos)