从 wxPython MenuBar 中删除菜单
Posted
技术标签:
【中文标题】从 wxPython MenuBar 中删除菜单【英文标题】:Removing a menu from a wxPython MenuBar 【发布时间】:2014-12-26 22:42:46 【问题描述】:我创建了一个 MenuBar 并向其附加了许多 Menu 对象。
我现在想删除其中一个菜单,只引用附加的 Menu 对象,不知道或不关心菜单的定位和标签。
这似乎是一件微不足道的事情,但 API 似乎并不是为处理它而构建的;所有方法都基于位置和标签。
存在一个 MenuBar.Remove() 方法,但它以位置为参数。没有方法接受菜单并返回其位置。
Menus 和 MenuBars 上的 Detach() 方法未记录在案,显然什么也不做。
我确信这是一个愚蠢的问题,而且解决方案是显而易见的,因为我之前找不到任何人问过这个问题,但我却没有找到解决方案。
【问题讨论】:
【参考方案1】:你可以看看这个例子:
# -*- 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()
【讨论】:
【参考方案2】:menuBarPos = self.menuBar.FindMenu('File')
if menuBarPos >= 0:
self.menuBar.Remove(menuBarPos)
删除“文件”菜单,如果该菜单不存在,则返回其位置为-1
【讨论】:
以上是关于从 wxPython MenuBar 中删除菜单的主要内容,如果未能解决你的问题,请参考以下文章