wxPython – 菜单项、菜单和菜单条

wxPython – 菜单项、菜单和菜单条

在顶层窗口的标题栏下面有一个水平条,用来显示一系列的菜单。它是wxPython API中 wx.MenuBar类 的一个对象。

一个wx.Menu类的对象被添加到菜单栏中。它也被用来创建上下文菜单和弹出式菜单。每个菜单可以包含一个或多个wx.MenuItem对象或层叠的菜单对象。

wx.MenuBar类除了一个默认的构造函数外,还有一个参数化的构造函数。

wx.MenuBar()  

wx.MenuBar(n, menus, titles, style)

参数’n’代表菜单的数量。 菜单 是一个菜单和标题的数组,以及一个字符串的数组。如果样式参数被设置为wx.MB_DOCKABLE,那么菜单栏可以被停靠。

以下是wx.MenuBar类的方法列表—

S.N. 方法和描述
1 Append() 将菜单对象添加到栏中
2 Check() 检查或取消对菜单的检查
3 Enable() 启用或禁用菜单
4 Remove() 从栏中删除一个菜单

一个wx.Menu类对象是一个或多个菜单项的下拉列表,用户可以选择其中一个。

下表显示了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

wx.ID_PASTE

然而,任何独特的整数都可以被分配为ID。文本参数是其标题。Kind参数采用以下枚举器之一 –

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,并可以进一步处理。例如,如果 “新建 “菜单项被选中,它就会在框架的文本框中显示出来。

完整的代码如下

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() 

上述代码产生的输出结果如下 –

菜单项、菜单和菜单条

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程