Menu Item, Menu & MenuBar類

正下方頂層窗口的標題欄中保留了一個水平條,以顯示一系列菜單。 這就是 wx.MenuBar 類在 wxPython 中 API 的對象。

wx.Menu類的一個對象被添加到菜單欄。它也用於創建上下文菜單和彈出菜單。每個菜單可以包含一個或多個wx.MenuItem對象或級聯Menu對象。

wx.MenuBar類有一個參數的構造函數,此外還有一個默認的。

wx.MenuBar()

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

參數「n」表示的菜單的數目。Menu是菜單和標題的數組和字符串數組。如果style參數設置爲wx.MB_DOCKABLE,菜單欄可以停靠。

以下是wx.MenuBar類的方法列表 -

S.N.

方法和說明

1

Append()

添加菜單對象到工具欄

2

Check()

選中或取消選中菜單

3

Enable()

啓用或禁用菜單

4

Remove()

去除工具欄中的菜單

wx.Menu類對象是一個或多個菜單項,其中一個可被用戶選擇的下拉列表。

下表顯示了wx.Menu類經常需要的方法-

S.N.

方法和說明

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參數是它的標題。類參數採用以下之一-

S.N.

參數 & 描述

1

wx.ITEM_NORMAL

普通菜單項

2

wx.ITEM_CHECK

檢查(或切換)菜單項

3

wx.ITEM_RADIO

單選菜單項

wx.Menu類也有 AppendRadioItem()和 AppendCheckItem()不需要各種參數。

菜單項可以設置爲顯示圖標或快捷方式。 wx.MenuItem類SetBitmap()函數需要要顯示的位圖對象。

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

EVT_MENU事件綁定有助於處理菜單選擇。

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

實例

下面的例子演示了wxPython的上述大部分的菜單系統的特徵。它顯示在菜單欄中顯示一個文件菜單。普通菜單項,子菜單,單選項和檢查項加入。菜單項也帶有一個圖標顯示。

事件處理函數,當被調用時檢索與事件關聯的ID,並且可以進一步處理。例如,如果「新建」菜單項被選中,這是回顯示在框架(frame)上的文本框中。

Menu.py 完整的代碼如下 -

import wx

class Mywin(wx.Frame):

def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title, size = (400,300))
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 - yiibai.com')
ex.MainLoop()

上面的代碼產生下面的輸出 -

Menu