10.1.1 如何创建一个菜单栏并把它附加到一个框架? 


要创建一个菜单栏,使用wx.MenuBar构造函数,它没有参数: 


wx.MenuBar() 


一旦菜单栏被创建了,使用SetMenuBar()方法将它附加给一个wx.Frame(或其子类)。通常这些都在框架的__init__或OnInit()方法中实施: 


menubar = wx.MenuBar()  

self.SetMenuBar 


你不必为菜单栏维护一个临时变量,但是这样做将使得添加菜单到菜单栏多少更简单点。要掌握程序中的其它地方的菜单栏,使用wx.Frame.GetMenuBar()。 


10.1.2 如何创建一个菜单并把它附加到菜单栏? 


wxPython菜单栏由一个个的菜单组成,其中的每个菜单都需要分别被创建。下面显示了wx.Menu的构造函数: 


wx.Menu(title="", style=0) 


对 于wx.Menu只有一个有效的样式。在GTK下,样式wx.MENU_TEAROFF使得菜单栏上的菜单能够被分开并作为独立的选择器。在其它平台下, 这个样式没有作用。如果平台支持,那么菜单被创建时可以有一个标题。图10.1显示了一个带有三个菜单的空白窗口。例10.1显示了被添到一个菜单栏上的 一系列菜单,这些菜单没有被添加菜单项。 


图10.1 



例10.1 添加菜单到一个菜单栏 


import wx 


class MyFrame(wx.Frame): 

    def __init__(self): 

        wx.Frame.__init__(self, None, -1, "Simple Menu Example") 

        p = wx.Panel(self) 

        menuBar = wx.MenuBar()# 创建一个菜单栏 

        menu = wx.Menu()# 创建一个菜单 

        menuBar.Append(menu, "Left Menu")# 添加菜单到菜单栏 

        menu2 = wx.Menu() 

        menuBar.Append(menu2, "Middle Menu") 

        menu3 = wx.Menu() 

        menuBar.Append(menu3, "Right Menu") 

        self.SetMenuBar(menuBar) 

         

if __name__ == "__main__": 

    app = wx.PySimpleApp() 

    frame = MyFrame() 

    frame.Show() 

    app.MainLoop() 


在wxPython 的菜单API中,一个对象的大部分处理是由它的容器类来管理的。在本章的后面,我们将讨论wx.Menu的特定的方法,因为这些方法的大多数涉及到菜单中 的菜单项的处理。在这一节的剩余部分,由于我们正在谈论处理wx.Menu对象,所以我们将列出wx.MenuBar的那些涉及到菜单的方法。表10.1 显示了wx.MenuBar中的四个方法,它们处理菜单栏的内容。 


表10.1 在菜单栏处理菜单的wx.MenuBar的方法 


Append(menu, title):将menu参数添加到菜单栏的尾部(靠右显示)。title参数被用来显示新的菜单。如果成功返回True,否则返回False。 


Insert(pos, menu, title):将 给定的menu插入到指定的位置pos(调用这个函数之后,GetMenu(pos) == menu成立)。就像在列表中插入一样,所有后面的菜单将被 右移。菜单的索引以0开始,所以pos为0等同于将菜单放置于菜单栏的左端。使用GetMenuCount()作为pos等同于使用Append。 title被用于显示名字。函数如果成功则返回True。 


Remove(pos):删除位于pos的菜单,之后的其它菜单左移。函数返回被删除的菜单。 


Replace(pos, menu, title):使用给定的menu,和title替换位置pos处的菜单。菜单栏上的其它菜单不受影响。函数返回替换前的菜单。 


wx.MenuBar包含一些其它的方法。它们用另外的方式处理菜单栏中的菜单,如表10.2所示。 


表10.2 wx.MenuBar的菜单属性方法 


EnableTop(pos, enable):设置位置pos处的菜单的可用/不可用状态。如果enable是True,那么该菜单是可用的,如果是False,那么它不可用。 


GetMenu(pos):返回给定位置处的菜单对象。 


GetMenuCount():返回菜单栏中的菜单的数量。 


FindMenu(title):返回菜单栏有给定title的菜单的整数索引。如果没有这样的菜单,那么函数返回常量wx.NOT_FOUND。该方法将忽略快捷键,如果有的话。 


GetLabelTop(pos) 
SetLabelTop(pos, label):得到或设置给定位置的菜单的标签。