- wxPython 教程
- wxPython - 首頁
- wxPython - 簡介
- wxPython - 環境
- wxPython - Hello World
- wxPython - GUI 構建工具
- wxPython - 主要類
- wxPython - 事件處理
- wxPython - 佈局管理
- wxPython - 按鈕
- wxPython - 可停靠視窗
- 多文件介面
- wxPython - 繪圖 API
- wxPython - 拖放
- wxPython 資源
- wxPython - 快速指南
- wxPython - 有用資源
- wxPython - 討論
選單項、選單和選單欄
頂級視窗標題欄下方的一條水平條用於顯示一系列選單。它是 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()
以上程式碼產生以下輸出: