1、创建一个 菜单栏 : menuBar = wx.MenuBar()
相当于这个白色地方,没有 File 这个菜单
2、创建 菜单 : fileMenu = wx.Menu()
这两个不是直接 "用的",叫菜单。既用来分类其他 菜单项 的文件夹样
3、创建 菜单项 : newItem = wx.MenuItem()
例如上图的 New Copy Cut Paste Radio_One 等等等等。
这些可以直接 "点" 的(看作按钮)的叫做 菜单项。
创建的时候需要分配 id (int 整数),到时候菜单事件处理的时候需要通过传递的 id (event.GetId())来判断单击的按钮。
4、将 菜单项 添加到 菜单中 : fileMenu.AppendItem(newItem)
这样当我们单机 File 的时候就会打开这个 "文件夹"
并且展示内容,添加多少就展示多少,并且按添加的顺序展示
5、将 菜单 添加到 菜单栏 中 : menuBar.Append(fileMenu, title ="File")
之前我们只是构建了一个上图红框 + File 菜单 的一个整体对象:fileMenu。
然后我们要把这个 菜单对象 添加到菜单栏中。
6、将该 菜单栏 设置为我们窗口框架的 "菜单栏" : self.SetMenuBar(menuBar)
即将之前建立的 菜单栏对象 放到窗口上去。
7、绑定 菜单事件 : self.Bind(wx.EVT_MENT, self.menuHandler)
调用 Bind() 这个绑定事件的函数,因为其他组件 比如按钮 编辑框 都有事件。
所以这里的 wx.EVT_MENT 是表示绑定的是 菜单事件。
menuHandler() 是自定义函数 用来菜单事件。
id = event.GetId() 用来判断单击的 菜单项。
函数参数名称:event 不能变,只能是这个单词。
8、窗口框架的处理 : 与菜单栏无关了
例如 调整大小、出现位置、是否可见
1、用到的 class :
wx.MenuBar()
wx.MenuBar(n, menus, titles, style)
有一个参数的构造函数,此外还有一个默认的。
参数 "n" 表示的菜单的数目。Menu 是菜单和标题的数组和字符串数组。如果 style 参数设置为 wx.MB_DOCKABLE,菜单栏可以停靠。
wx.Menu 类对象是一个或多个菜单项,其中一个可被用户选择的下拉列表。
该开始 new 菜单对象的时候 只要 fileMenu = wx.Menu() 即可
之后添加菜单项目的时候,可直接使用 Append() 函数添加,或 wx.MenuItem 类的一个对象被追加。
- wx.Menu.Append(id, text, kind)
- Item = Wx.MenuItem(parentmenu, id, text, kind)
- wx.Menu.Append(Item)
当我们 new 菜单项对象时 需要填几个参数。
- newItem = wx.MenuItem(parentMenu, id, text, kind)
其中 :
parentMenu 为其 菜单的对面,比如上文提到的 newMenu 菜单项的 parentMenu 为 fileMenu
id 为该菜单项的 id 到时候处理 菜单项时间的时候需要用到滴
text 为这个菜单项的名称
kind 为该菜单项的类型
①注册 快捷键的方法 :参数 text = "名称 / t 快捷键"
比如 text = "Quit/tCtrl+Q"
这样就注册了 Ctrl + Q 的快捷键
②其他类型菜单项的方法
菜单项有 3 种:
只需要 参数 kind = 相关类型常量即可
期间看了找了挺多资料 : http://www.yiibai.com/wxpython/wxpython_menus.html#
这个里面的很详细,且例子经典。
o.o 要是先看不懂,就敲抄一边会好很多。
关于 wxPyton 中菜单栏的运用的,以下代码能够很好的展示相关的操作方法。
- #coding:utf-8
- #author:Twobox
- import wx
- class Mywin(wx.Frame):
- def __init__(self, parent, title):
- super(Mywin, self).__init__(parent, title = title)
- self.InitUI()
- def InitUI(self):
- #创建一个菜单栏
- menuBar = wx.MenuBar()
- #创建一个菜单 1
- fileMenu = wx.Menu()
- #创建一个菜单项 1-1
- newItem = wx.MenuItem(fileMenu, id = wx.ID_NEW, text = 'New', kind = wx.ITEM_NORMAL)
- fileMenu.AppendItem(newItem)
- #添加一行线
- fileMenu.AppendSeparator()
- #创建一个子菜单 1-2
- editMenu = wx.Menu()
- #创建三个子菜单的菜单项目 1-2-1 and 1-2-2 and 1-2-3
- cutItem = wx.MenuItem(editMenu, id = 122, text = "Cut", kind = wx.ITEM_NORMAL)
- copyItem = wx.MenuItem(editMenu, id = 121, text = "Copy", kind = wx.ITEM_NORMAL)
- pasteItem = wx.MenuItem(editMenu, id = 123, text = "Paste", kind = wx.ITEM_NORMAL)
- editMenu.AppendItem(copyItem)
- editMenu.AppendItem(cutItem)
- editMenu.AppendItem(pasteItem)
- #把子菜单 1-2 添加到菜单 1 中
- fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu)
- # 添加一行线
- fileMenu.AppendSeparator()
- #添加两个单选框 1-3 and 1-4
- radio1 = wx.MenuItem(fileMenu, id = 13, text = "Radio_One", kind = wx.ITEM_RADIO)
- radio2 = wx.MenuItem(fileMenu, id = 14, text = "Radio_Two", kind = wx.ITEM_RADIO)
- fileMenu.AppendItem(radio1)
- fileMenu.AppendItem(radio2)
- #PS.单选框 只在自己区域之间(两行线之间) 相互作用
- # 添加一行线
- fileMenu.AppendSeparator()
- #添加一个 可选中 的菜单项 1-5
- fileMenu.AppendCheckItem(id = 15, item = "Check")
- #添加一个 菜单项 1-6 并注册快捷键
- quit = wx.MenuItem(fileMenu, id = wx.ID_EXIT, text = "Quit\tCtrl+Q", kind = wx.ITEM_NORMAL)
- fileMenu.AppendItem(quit)
- #将 fileMenu 菜单添加到菜单栏中
- menuBar.Append(fileMenu, title = 'File')
- #设置窗口框架的菜单栏为 menuBar
- self.SetMenuBar(menuBar)
- #绑定事件处理
- self.Bind(wx.EVT_MENU, self.menuHandler)
- #让其在屏幕中间打开调整大小展示
- self.SetSize((300,400))
- self.Centre()
- self.Show()
- def menuHandler(self, event):
- id = event.GetId()
- if id == wx.ID_NEW:
- print("NEW")
- if id == wx.ID_EXIT:
- exit(0)
- if __name__ == "__main__":
- ex = wx.App()
- Mywin(None, 'Menu - Test')
- #Mywin(None, 'Menu - Test') #可以同时打开两个窗口 果然体现面向对象的程序开发思想
- ex.MainLoop()
2017-08-20 14:21:26
来源: http://www.cnblogs.com/Twobox/p/7399871.html