2008年5月16日 星期五

wxPython裡的元件 : Menubar

基本上Menubar是由Menu組成的, 而Menu裡面則有很多的Menu item, 在wxPython裡面就是用這樣的方式來加入一個Menubar.

  1. 建立MenuBar
  2. 建立Menus
  3. 建立Menu items
  4. 將建立的Menu items加入Menu
  5. 將建立好的Menus加入MenuBar
  6. 在視窗中(Frame)加入MenuBar
透過這樣的方式我們就可以在自己產生的視窗中, 建立一個自定的MenuBar.


# -*- coding: cp950 -*-
import wx

#建立Frame
class SimpleMenu(wx.Frame):
def __init__(self, parent, id, title):
#呼叫wx.Frame的constructor
wx.Frame.__init__(self, parent, id, title, size=(250, 150))
#建立MenuBar
menu_bar = wx.MenuBar()
#建立Menu
menu = wx.Menu()
#建立Menu item
menu_item = wx.MenuItem(menu, 1, '&Quit\tCtrl+Q')
#把Menu item加入Menu裡面
menu.AppendItem(menu_item)
#把Menu item被按下對應到某個function
self.Bind(wx.EVT_MENU, self.OnQuit, id=1)
#把Menu加入MenuBar中
menu_bar.Append(menu, '&File')
#在視窗中加入MenuBar
self.SetMenuBar(menu_bar)
#讓視窗產生在螢幕中間
self.Centre()
#顯示視窗
self.Show(True)
#當按下Quit menu item時, 關閉視窗
def OnQuit(self,event):
self.Close()

#程式主要部分
if __name__ == "__main__": #確定這個程式是自己執行, 而非被呼叫
#建立wx.App
app = wx.App()
#建立並顯示視窗
SimpleMenu(None, -1, 'simple menu example')
#等待event
app.MainLoop()

在建立Menuitem的function
menu_item = wx.MenuItem(menu, 1, '&Quit\tCtrl+Q')
第二個參數是那個Menuitem的id,
用來對應到下面讓這個Menuitem被按下時執行某個function裡的id參數:
self.Bind(wx.EVT_MENU, self.OnQuit, id=1)
其他功能 :

在menu加入submenu : (submenu也是wx.Menu)
menu.AppendMenu(-1, 'I&mport', submenu)
menu separator :
menu.AppendSeparator()
menu item check類型:
menu.Check(ID_STAT, True)
self.shst = menu.Append(ID_STAT, 'Show statubar', 'Show Statusbar', kind=wx.ITEM_CHECK)

#被檢查menu是否被checked
def ToggleStatusBar(self, event):
if self.shst.IsChecked():
self.statusbar.Show()
else:
self.statusbar.Hide()

參考資料 :
The wxPython tutorial

沒有留言: