wxPython使用EVT_MENU_OPEN事件实现运行时生成动态菜单

wxPython中控件的邮件弹出式菜单是在 EVT_CONTEXT_MENU 事件中创建菜单对象,并且 EVT_CONTEXT_MENU 事件处理完毕后菜单对象即被释放。而主菜单栏MenuBar一般在窗口构造时即创建,为了让主菜单也可以根据条件动态生成菜单,可以借助 EVT_MENU_OPEN 事件来实现。

class MainFrame(wx.Frame):
	def __init__(self):
		super().__init__(None, wx.ID_ANY, '')
		
		#创建一个 "文件" 菜单,其 "新建" 菜单的子菜单被动态生成
		self.Bar = wx.MenuBar()
		self.Menu = wx.Menu()
		self.SubMenu = wx.Menu()
		self.Menu.Append(wx.NewIdRef(), '新建', subMenu=self.SubMenu)
		self.Bar.Append(self.Menu, '文件')
		self.SetMenuBar(self.Bar);
		
		#注册事件处理函数
		self.Bind(wx.EVT_MENU_OPEN, self.onMenuOpen)

	def onMenuOpen(self, evt):
		#如果是 "文件" 菜单,则清除 "新建" 的子菜单,然后动态生成子菜单项增加进去
		if evt.GetMenu() == self.Menu:		
            for _it in [x for x in self.SubMenu.MenuItems]:
                self.SubMenu.DestroyItem(_it)
			self.SubMenu.Append(wx.NewIdRef(), '菜单项1')
			self.SubMenu.Append(wx.NewIdRef(), '菜单项2')
			self.SubMenu.Append(wx.NewIdRef(), '菜单项3')
			...		

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值