The wxPython Guide笔记2

(二)Menus and Toolbars in wxPython
1    组成
    一个菜单是由wx.MenuBar,  wx.Menu 和  wx.MenuItem三个部分组成 wx.MenuBar是 wx.Menu的容器,wx.Menu是wx.MenuItem的容器
    一个简单示例

python 代码
 
  1. import wx  
  2.   
  3. #构造一个带菜单的窗口 继承wx.Frame  
  4. class SimpleMenu(wx.Frame):  
  5.     def __init__(self, parent, id, title):  
  6.     wx.Frame.__init__(self, parent, id, title, size=(250,250))  
  7. #构造一个MenuBar  
  8.     menubar=wx.MenuBar()  
  9. #构造一个Menu  
  10.     file=wx.Menu()  
  11. #给Menu添加一个MenuItem  
  12.     file.Append(-1,'Quit', 'Quit application')  
  13. #给MenuBar添加一个Menu 就是上面的file  
  14.     menubar.Append(file, '&File')  
  15. #让Frame加上这个menubar  
  16.     self.SetMenuBar(menubar)  
  17. #用继承自windows的方法来设置位置         
  18.     self.Centre()  
  19.     self.Show(True)  
  20.   
  21. app = wx.App()  
  22. SimpleMenu(None, -1, 'simple menu example')  
  23. app.MainLoop()  



2    Icons, shortcuts, events
    一个带图标的例子

python 代码
 
  1. import wx  
  2.   
  3. class MenuExample(wx.Frame):  
  4.     def __init__(self, parent, id, title):  
  5.     wx.Frame.__init__(self, parent, id, title, size=(250,150))  
  6.      
  7.     menubar = wx.MenuBar()  
  8.     file = wx.Menu()  
  9. #这里用了添加MenuItem的另一种方法 先添加一个MenuItem Object而不是直接在Menu上Append  
  10. #如果想添加图标就要自己手动的创建wx.MenuItem对象  
  11.     quit = wx.MenuItem(file, 1, '&Quit\tCtrl+q')  
  12. #设置图标的地址  
  13.     quit.SetBitmap(wx.Bitmap('icons/bp_btn2.png'))         
  14.     file.AppendItem(quit)  
  15. #添加一个事件         
  16.     self.Bind(wx.EVT_MENU, self.onQuit, id=1)  
  17.     menubar.Append(file, '&File')  
  18.     self.SetMenuBar(menubar)  
  19.      
  20.     self.Centre()  
  21.     self.Show(True)  
  22. #定义关闭按钮事件     
  23.     def onQuit(self, event):  
  24.     self.Close()  
  25.      
  26.      
  27. app = wx.App()  
  28. MenuExample(None, -1, '')  
  29. app.MainLoop()  


3    Submenus
    菜单下面的menuitem可以有子菜单 便于分类 还可以添加分隔符
    例子程序

python 代码
 
  1. import wx  
  2.   
  3.   
  4. ID_QUIT = 1  
  5.   
  6. class SubmenuExample(wx.Frame):  
  7.     def __init__(self, parent, id, title):  
  8.     wx.Frame.__init__(self, parent, id, title, size=(350,250))  
  9. #构造一个wx.MenuBar  
  10.     menubar = wx.MenuBar()  
  11. #构造一个wx.Menu 并添加wx.MeunItem 和一个分隔符         
  12.     file = wx.Menu()  
  13.     file.Append(-1, '&New')  
  14.     file.Append(-1, '&Open')  
  15.     file.Append(-1, '&Save')  
  16.     file.AppendSeparator()  
  17. #新构造一个wx.Menu  
  18.     imp = wx.Menu()  
  19.     imp.Append(-1, 'Import newsfeed list...')  
  20.     imp.Append(-1, 'Import bookmarks...')  
  21.     imp.Append(-1, 'Import mail...')  
  22. #把这个菜单作为file的子菜单添加进来 用 AppenMenu() 方法  
  23.     file.AppendMenu(-1, '&Import', imp)  
  24.     quit = wx.MenuItem(file, ID_QUIT, '&Quit\tCtrl+W')  
  25.     quit.SetBitmap(wx.Bitmap('icons/bp_btn2.png'))  
  26.     file.AppendItem(quit)  
  27.      
  28.     self.Bind(wx.EVT_MENU, self.OnQuit, id=ID_QUIT)  
  29.      
  30.     menubar.Append(file, '&File')  
  31.     self.SetMenuBar(menubar)  
  32.      
  33.     self.Centre()  
  34.     self.Show(True)  
  35.      
  36.     def OnQuit(self, event):  
  37.     self.Close()  
  38.      
  39. app = wx.App()  
  40. SubmenuExample(None, -1, 'Submenu')  
  41. app.MainLoop()  

       
4    Various menu items包含
        normal item
        check item
        radio item
    一个带有CheckItem的例子
 
python 代码
 
  1. import wx  
  2.   
  3.  ID_STAT = 1  
  4.  ID_TOOL = 2  
  5.   
  6.  class CheckMenuItem(wx.Frame):  
  7.      def __init__(self, parent, id, title):  
  8.      wx.Frame.__init__(self, parent, id, title, size=(350, 250))  
  9.           
  10.      menubar = wx.MenuBar()  
  11.      file = wx.Menu()  
  12.      view = wx.Menu()  
  13.  #在view这个Menu上加上两个check item id用在前面定义的ID_STAT和ID_TOOL  
  14.  #如果想定义为check类型的item就要在Append()后面加上一个参数kind=wx.ITEM_CHECK 默认的是wx.ITEM_NORMAL  
  15.  #Append返回的是一个wx.MeunItem  
  16.      self.shst = view.Append(ID_STAT, 'show statubar', 'Show StatuBar',  kind=wx.ITEM_CHECK)  
  17.      self.shtl = view.Append(ID_TOOL, 'show toolbar', 'Show ToolBar', kind=wx.ITEM_CHECK)  
  18.  #默认把这两项勾选上  
  19.      view.Check(ID_STAT, True)  
  20.      view.Check(ID_TOOL, True)  
  21.  #绑定这两个check item的事件函数  
  22.      self.Bind(wx.EVT_MENU, self.ToggleStatusBar, id=ID_STAT)  
  23.      self.Bind(wx.EVT_MENU, self.ToggleToolBar, id=ID_TOOL)  
  24.      menubar.Append(file, '&File')  
  25.      menubar.Append(view, '&View')  
  26.  #把这个menubar天到Frame上  
  27.      self.SetMenuBar(menubar)  
  28.   
  29.  #给Frame添加一个toolbar  
  30.      self.toolbar = self.CreateToolBar()  
  31.      self.toolbar.AddLabelTool(3, '', wx.Bitmap('icons/bp_btn2.png'))  
  32.  #给Frame添加一个statubar  
  33.      self.statusbar = self.CreateStatusBar()  
  34.           
  35.      self.Centre()  
  36.      self.Show(True)  
  37.  #定义StatusBar的check事件  
  38.      def ToggleStatusBar(self, event):   
  39.  #如果勾选了 就显示StatusBar  
  40.      if self.shst.IsChecked():  
  41.          self.statusbar.Show()  
  42.  #如果没有勾选 就隐藏StatusBar  
  43.      else:  
  44.          self.statusbar.Hide()  
  45.  #同样的定义toolbar的check事件  
  46.      def ToggleToolBar(self, event):  
  47.      if self.shtl.IsChecked():  
  48.          self.toolbar.Show()  
  49.      else:  
  50.          self.toolbar.Hide()  
  51.           
  52.  app = wx.App()  
  53.  CheckMenuItem(None, -1, 'check menu item')  
  54.  app.MainLoop()  

   

5    Context menu
    定义弹出式菜单 比如右键点击某个目标时候弹出的菜单
    一个实例程序

python 代码
 
  1. import wx  
  2. #创建一个分离的Menu class  
  3. class MyPopupMenu(wx.Menu):  
  4.     def __init__(self, parent):  
  5.   
  6.     wx.Menu.__init__(self)  
  7.      
  8.     self.parent = parent  
  9. #定义一个最小化窗口的item  
  10.     minimize = wx.MenuItem(self, wx.NewId(), 'Minimize')  
  11.     self.AppendItem(minimize)  
  12.     self.Bind(wx.EVT_MENU, self.OnMinimize, id=minimize.GetId())  
  13. #定义一个关闭窗口的item  
  14.     close = wx.MenuItem(self, wx.NewId(), 'Close')  
  15. #给Menu添加这个Close的Item 用的是AppendItem方法 因为是在Menu上添加,不是在MenuBar上添加  
  16.     self.AppendItem(close)  
  17.     self.Bind(wx.EVT_MENU, self.OnClose, id=close.GetId())  
  18. #最小化窗口         
  19.     def OnMinimize(self, event):             
  20.     self.parent.Iconize()  
  21. #关闭窗口     
  22.     def OnClose(self, event):  
  23.     self.parent.Close()  
  24.      
  25. class ContextMenu(wx.Frame):  
  26.     def __init__(self, parent, id, title):  
  27.     wx.Frame.__init__(self, parent, id, title, size=(250,150))  
  28. #出发弹出窗口的事件是wx.EVT_RIGHT_DOWN 调用   OnRightDown     
  29.     self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)  
  30.      
  31.     self.Centre()  
  32.     self.Show()  
  33.      
  34.     def OnRightDown(self, event):  
  35. #第一个参数是弹出的窗口 第二个参数是位置  
  36.     self.PopupMenu(MyPopupMenu(self), event.GetPosition())  
  37. app = wx.App()  
  38. frame = ContextMenu(None, -1, 'context menu')  
  39. app.MainLoop()  


6    Toolbars 快捷的工具栏
    参数表CreateToolBar(long style=-1, int winid=-1, String name=ToolBarNameStr)

python 代码
 
  1. #!/usr/bin/python  
  2.   
  3. # simpletoolbar.py  
  4.   
  5. import wx  
  6.   
  7. class SimpleToolbar(wx.Frame):  
  8.     def __init__(self, parent, id, title):  
  9.     wx.Frame.__init__(self, parent, id, title, size=(300, 200))  
  10.   
  11.     toolbar = self.CreateToolBar()  
  12.     #self.toolbar.AddLabelTool(wx.ID_EXIT, '', wx.Bitmap('icons/bp_btn2.png'))  
  13. #AddSimpleTool方法来创建一个tool 不知道为什么调用上面的方法不其作用  
  14.     toolbar.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/bp_btn2.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15. #添加tool完了以后 调用此方法 在linux上不需要  
  16.     toolbar.Realize()  
  17. #给这个tool添加事件处理  
  18.     self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)  
  19.   
  20.     self.Centre()  
  21.     self.Show(True)  
  22. #定义这个tool bind的事件处理函数  
  23.     def OnExit(self, event):  
  24.     self.Close()  
  25.   
  26.   
  27. app = wx.App()  
  28. SimpleToolbar(None, -1, 'simple toolbar')  
  29. app.MainLoop()  


   
    另一个例子 两个toolbar

python 代码
 
  1. #!/usr/bin/python  
  2.   
  3. # toolbars.py  
  4.   
  5. import wx  
  6.   
  7. class Toolbars(wx.Frame):  
  8.     def __init__(self, parent, id, title):  
  9.     wx.Frame.__init__(self, parent, id, title, size=(300, 200))  
  10. #用一个BoxSizer容器来控制显示这两个toolbar  
  11.     vbox = wx.BoxSizer(wx.VERTICAL)  
  12.   
  13.     toolbar1 = wx.ToolBar(self, -1)  
  14.     toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_red.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15.     toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_green.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  16.     toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/process.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  17.     toolbar1.Realize()  
  18.   
  19.     toolbar2 = wx.ToolBar(self, -1)  
  20.     toolbar2.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/customcontrol.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  21.     toolbar2.Realize()  
  22.   
  23.     vbox.Add(toolbar1, 0, wx.EXPAND)  
  24.     vbox.Add(toolbar2, 0, wx.EXPAND)  
  25.   
  26.     self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)  
  27.   
  28.     self.SetSizer(vbox)  
  29.     self.Centre()  
  30.     self.Show(True)  
  31.   
  32.     def OnExit(self, event):  
  33.     self.Close()  
  34.   
  35.   
  36. app = wx.App()  
  37. Toolbars(None, -1, 'toolbars')  
  38. app.MainLoop()  





    纵向toolbar

python 代码
 
  1. #!/usr/bin/python  
  2.   
  3. # verticaltoolbar.py  
  4.   
  5. import wx  
  6.   
  7. class VerticalToolbar(wx.Frame):  
  8.     def __init__(self, parent, id, title):  
  9.     wx.Frame.__init__(self, parent, id, title, size=(240, 300))  
  10. #wx.TB_VERTICAL是纵向 wx.VERTICAL 是横向  
  11.     toolbar = self.CreateToolBar(wx.TB_VERTICAL)  
  12.     toolbar.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_red.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  13.     toolbar.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_green.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  14.     toolbar.AddSimpleTool(wx.ID_REDO, wx.Image('icons/process.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15.     toolbar.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/customcontrol.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  16.   
  17.   
  18.     toolbar.Realize()  
  19.   
  20.   
  21.     self.Centre()  
  22.     self.Show(True)  
  23.   
  24.     def OnExit(self, event):  
  25.     self.Close()  
  26.   
  27.   
  28. app = wx.App()  
  29. VerticalToolbar(None, -1, 'vertical toolbar')  
  30. app.MainLoop()  



    带有分隔符的toolbar
    #!/usr/bin/python

    # toolbars.py

python 代码
 
  1.     import wx  
  2.   
  3.     class Toolbars(wx.Frame):  
  4.         def __init__(self, parent, id, title):  
  5.         wx.Frame.__init__(self, parent, id, title, size=(300, 200))  
  6. #这里如果不加wx.VERTICAL就编程一排的了  
  7.         vbox = wx.BoxSizer(wx.VERTICAL)  
  8.   
  9.         toolbar1 = wx.ToolBar(self, -1)  
  10.         toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_red.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  11.         toolbar1.AddSimpleTool(wx.ID_ANY, wx.Image('icons/book_green.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  12.     #添加一个分隔符  
  13.         toolbar1.AddSeparator()  
  14.         toolbar1.AddSimpleTool(wx.ID_REDO, wx.Image('icons/process.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  15.         toolbar1.EnableTool(wx.ID_REDO, False)  
  16.         toolbar1.Realize()  
  17.   
  18.         toolbar2 = wx.ToolBar(self, -1)  
  19.         toolbar2.AddSimpleTool(wx.ID_EXIT, wx.Image('icons/customcontrol.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'New', '')  
  20.         toolbar2.Realize()  
  21.   
  22.         vbox.Add(toolbar1, 0, wx.EXPAND)  
  23.         vbox.Add(toolbar2, 0, wx.EXPAND)  
  24.   
  25.         self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)  
  26.   
  27.         self.SetSizer(vbox)  
  28.         self.Centre()  
  29.         self.Show(True)  
  30.   
  31.         def OnExit(self, event):  
  32.         self.Close()  
  33.   
  34.   
  35.     app = wx.App()  
  36.     Toolbars(None, -1, 'toolbars')  
  37.     app.MainLoop()  



你可能感兴趣的:(编程,windows,linux,python,wxPython)