菜单项、菜单和菜单栏



顶级窗口标题栏下方的一条水平条用于显示一系列菜单。它是 wxPython API 中 **wx.MenuBar 类** 的一个对象。

wx.Menu 类的对象被添加到菜单栏中。它也用于创建上下文菜单和弹出菜单。每个菜单可以包含一个或多个 wx.MenuItem 对象或级联菜单对象。

wx.MenuBar 类除了默认构造函数之外,还有一个带参数的构造函数。

wx.MenuBar()  

wx.MenuBar(n, menus, titles, style)

参数“n”表示菜单的数量。**Menu** 是菜单和标题的数组,以及字符串数组。如果 style 参数设置为 wx.MB_DOCKABLE,则菜单栏可以停靠。

以下是 wx.MenuBar 类的函数列表:

序号 函数 & 描述
1

Append()

将菜单对象添加到栏中

2

Check()

选中或取消选中菜单

3

Enable()

启用或禁用菜单

4

Remove()

从栏中删除菜单

wx.Menu 类对象是一个下拉列表,其中包含一个或多个菜单项,用户可以选择其中一个。

下表显示了 wx.Menu 类中常用的函数:

序号 函数 & 描述
1

Append()

在菜单中添加菜单项

2

AppendMenu()

追加子菜单

3

AppendRadioItem()

追加可选择的单选项

4

AppendCheckItem()

追加可勾选的菜单项

5

AppendSeparator()

添加分隔线

6

Insert()

在给定位置插入新菜单

7

InsertRadioItem()

在给定位置插入单选项

8

InsertCheckItem()

在给定位置插入新的复选框项

9

InsertSeparator()

插入分隔线

10

Remove()

从菜单中删除一项

11

GetMenuItems()

返回菜单项列表

**菜单项** 可以使用 Append() 函数直接添加,或者使用 wx.MenuItem 类的对象进行追加。

wx.Menu.Append(id, text, kind)
  
Item = Wx.MenuItem(parentmenu, id, text, kind) 
wx.Menu.Append(Item)

为了定义菜单项,必须提及要将其添加到其中的菜单。

wxPython 有大量标准 ID 可以分配给标准菜单项。在某些操作系统平台上,它们也与标准图标相关联。

wx.ID_SEPARATOR
wx.ID_ANY
wx.ID_OPEN
wx.ID_CLOSE
wx.ID_NEW
wx.ID_SAVE
wx.ID_SAVEAS
wx.ID_EDIT
wx.ID_CUT
wx.ID_COPY
wx.ID_PASTE

但是,任何唯一的整数都可以作为 ID 分配。text 参数是其标题。kind 参数采用以下枚举器之一:

序号 参数 & 描述
1

wx.ITEM_NORMAL

普通菜单项

2

wx.ITEM_CHECK

复选(或切换)菜单项

3

wx.ITEM_RADIO

单选菜单项

wx.Menu 类还具有 AppendRadioItem() 和 AppendCheckItem(),它们不需要 kind 参数。

可以设置菜单项以显示图标或快捷方式。wx.MenuItem 类的 SetBitmap() 函数需要一个要显示的位图对象。

wx.MenuItem.SetBitmap(wx.Bitmap(image file))

EVT_MENU 事件绑定器有助于处理菜单选择。

self.Bind(wx.EVT_MENU, self.menuhandler)

示例

以下示例演示了 wxPython 中菜单系统的大部分上述功能。它显示了在菜单栏中显示的文件菜单。普通菜单项、子菜单、单选项和复选框项都已添加到其中。还存在具有图标的菜单项。

事件处理程序在被调用时检索与事件关联的 ID,并且可以进一步处理。例如,如果选择了“新建”菜单项,则会在框架上的文本框中回显它。

完整代码如下:

import wx  

class Mywin(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title, size = (250,150))  
      self.InitUI() 
         
   def InitUI(self):    
      menubar = wx.MenuBar() 
		
      fileMenu = wx.Menu() 
      newitem = wx.MenuItem(fileMenu,wx.ID_NEW, text = "New",kind = wx.ITEM_NORMAL) 
      newitem.SetBitmap(wx.Bitmap("new.bmp")) 
      fileMenu.AppendItem(newitem) 
		
      fileMenu.AppendSeparator()
		
      editMenu = wx.Menu() 
      copyItem = wx.MenuItem(editMenu, 100,text = "copy",kind = wx.ITEM_NORMAL)
      copyItem.SetBitmap(wx.Bitmap("copy.bmp")) 
		
      editMenu.AppendItem(copyItem) 
      cutItem = wx.MenuItem(editMenu, 101,text = "cut",kind = wx.ITEM_NORMAL) 
      cutItem.SetBitmap(wx.Bitmap("cut.bmp")) 
		
      editMenu.AppendItem(cutItem) 
      pasteItem = wx.MenuItem(editMenu, 102,text = "paste",kind = wx.ITEM_NORMAL) 
      pasteItem.SetBitmap(wx.Bitmap("paste.bmp")) 
		
      editMenu.AppendItem(pasteItem) 
      fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu) 
      fileMenu.AppendSeparator() 
         
      radio1 = wx.MenuItem(fileMenu, 200,text = "Radio1",kind = wx.ITEM_RADIO) 
      radio2 = wx.MenuItem(fileMenu, 300,text = "radio2",kind = wx.ITEM_RADIO) 
		
      fileMenu.AppendItem(radio1) 
      fileMenu.AppendItem(radio2) 
      fileMenu.AppendSeparator() 
         
      fileMenu.AppendCheckItem(103,"Checkable") 
      quit = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+Q') 
		
      fileMenu.AppendItem(quit) 
      menubar.Append(fileMenu, '&File') 
		
      self.SetMenuBar(menubar) 
      self.text = wx.TextCtrl(self,-1, style = wx.EXPAND|wx.TE_MULTILINE) 
      self.Bind(wx.EVT_MENU, self.menuhandler) 
      self.SetSize((350, 250)) 
      self.Centre() 
      self.Show(True)
		
   def menuhandler(self, event): 
      id = event.GetId() 
      if id == wx.ID_NEW: 
         self.text.AppendText("new"+"\n")
			
ex = wx.App() 
Mywin(None,'MenuBar demo') 
ex.MainLoop() 

以上代码产生以下输出:

Menu Bar Output
wxpython_major_classes.htm
广告

© . All rights reserved.