1、总结
1、大体创建过程
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、窗口框架的处理 : 与菜单栏无关了
例如 调整大小、出现位置、是否可见
2、各项详解(参考其他)
1、用到的 class :
菜单栏 : wx.MenuBar 类
wx.MenuBar()
wx.MenuBar(n, menus, titles, style)
有一个参数的构造函数,此外还有一个默认的。
参数“n”表示的菜单的数目。Menu是菜单和标题的数组和字符串数组。如果style参数设置为wx.MB_DOCKABLE,菜单栏可以停靠。
菜单 : wx.Menu 类
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)
菜单项:wx.MenuItem 类
当我们 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 = 相关类型常量即可
2、感想
期间看了找了挺多资料 : http://www.yiibai.com/wxpython/wxpython_menus.html#
这个里面的很详细,且例子经典。
o.o 要是先看不懂,就敲抄一边会好很多。
关于wxPyton 中菜单栏的运用的,以下代码能够很好的展示相关的操作方法。
3、样例代码
1 #coding:utf-8 2 #author:Twobox 3 4 import wx 5 6 class Mywin(wx.Frame): 7 def __init__(self, parent, title): 8 super(Mywin, self).__init__(parent, title = title) 9 self.InitUI() 10 11 def InitUI(self): 12 #创建一个菜单栏 13 menuBar = wx.MenuBar() 14 15 #创建一个菜单 1 16 fileMenu = wx.Menu() 17 18 #创建一个菜单项 1-1 19 newItem = wx.MenuItem(fileMenu, id = wx.ID_NEW, text = 'New', kind = wx.ITEM_NORMAL) 20 fileMenu.AppendItem(newItem) 21 22 #添加一行线 23 fileMenu.AppendSeparator() 24 25 #创建一个子菜单 1-2 26 editMenu = wx.Menu() 27 28 #创建三个子菜单的菜单项目 1-2-1 and 1-2-2 and 1-2-3 29 cutItem = wx.MenuItem(editMenu, id = 122, text = "Cut", kind = wx.ITEM_NORMAL) 30 copyItem = wx.MenuItem(editMenu, id = 121, text = "Copy", kind = wx.ITEM_NORMAL) 31 pasteItem = wx.MenuItem(editMenu, id = 123, text = "Paste", kind = wx.ITEM_NORMAL) 32 editMenu.AppendItem(copyItem) 33 editMenu.AppendItem(cutItem) 34 editMenu.AppendItem(pasteItem) 35 36 #把子菜单 1-2 添加到菜单 1 中 37 fileMenu.AppendMenu(wx.ID_ANY, "Edit", editMenu) 38 39 # 添加一行线 40 fileMenu.AppendSeparator() 41 42 #添加两个单选框 1-3 and 1-4 43 radio1 = wx.MenuItem(fileMenu, id = 13, text = "Radio_One", kind = wx.ITEM_RADIO) 44 radio2 = wx.MenuItem(fileMenu, id = 14, text = "Radio_Two", kind = wx.ITEM_RADIO) 45 fileMenu.AppendItem(radio1) 46 fileMenu.AppendItem(radio2) 47 #PS.单选框 只在自己区域之间(两行线之间) 相互作用 48 49 # 添加一行线 50 fileMenu.AppendSeparator() 51 52 #添加一个 可选中 的菜单项 1-5 53 fileMenu.AppendCheckItem(id = 15, item = "Check") 54 55 #添加一个 菜单项 1-6 并注册快捷键 56 quit = wx.MenuItem(fileMenu, id = wx.ID_EXIT, text = "Quit Ctrl+Q", kind = wx.ITEM_NORMAL) 57 fileMenu.AppendItem(quit) 58 59 #将 fileMenu 菜单添加到菜单栏中 60 menuBar.Append(fileMenu, title = 'File') 61 62 #设置窗口框架的菜单栏为 menuBar 63 self.SetMenuBar(menuBar) 64 65 #绑定事件处理 66 self.Bind(wx.EVT_MENU, self.menuHandler) 67 68 #让其在屏幕中间打开调整大小展示 69 self.SetSize((300,400)) 70 self.Centre() 71 self.Show() 72 73 def menuHandler(self, event): 74 id = event.GetId() 75 if id == wx.ID_NEW: 76 print("NEW") 77 if id == wx.ID_EXIT: 78 exit(0) 79 80 81 82 if __name__ == "__main__": 83 ex = wx.App() 84 Mywin(None, 'Menu - Test') 85 #Mywin(None, 'Menu - Test') #可以同时打开两个窗口 果然体现面向对象的程序开发思想 86 ex.MainLoop()
2017-08-20 14:21:26