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 - tw511.com') 
ex.MainLoop() 

上面的程式碼產生下面的輸出 -