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、样例代码

  

 #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

    

[Python] wxPython 菜单栏控件学习总结(原创)的更多相关文章

  1. [Python] wxPython 基本控件 (转)

    转自:http://www.cnblogs.com/wangjian8888/p/6028777.html 一.静态文本控件 wx.StaticText(parent, id, label, pos= ...

  2. [Python] wxPython 编辑框组件学习总结 (原创)

    1.总结 1.常用4种 编辑框 的构造 1.普通编辑框 单行输入的简单编辑框 (?为所在框的对象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密码编辑框 ...

  3. python之Tkinter控件学习

    转载自  http://www.cnblogs.com/kaituorensheng/p/3287652.html#_label0 阅读目录 1. 产品介绍 2. 设计规划 3. 相关知识 4. 源码 ...

  4. Python Tkinter 基础控件学习

    # -*- coding: utf-8 -*- from Tkinter import * def btn_click(): b2['text'] = 'clicked' evalue = e.get ...

  5. wxPython控件学习之wx.grid.Grid 表格控件

    wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEdit ...

  6. 转)delphi chrome cef3 控件学习笔记 (二)

    (转)delphi chrome cef3 控件学习笔记 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原创 2016 ...

  7. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  8. DevExpress控件学习总结(转)

    DevExpress控件学习总结   1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹 ...

  9. Python Tkinter基础控件入门实例

    分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...

随机推荐

  1. tp框架---View视图层---模板继承(举例说明)

    当我们做动态页面时,我们会发现一个网站的头部和尾部是相同的,那么我们如何用tp框架来做模板呢 ? 先看一下注意事项: (1)每个区块由<block></block>标签组成 ( ...

  2. 移动端300ms的点击延迟以及解决方案

    [今天做在移动端的一些效果时,我选择使用动画而不是用过渡,这个300ms的点击延迟是我为什么使用动画而不使用过渡最主要的一个原因] 动画和过渡 共同点:都是css控制DOM运动, 不同点: 1.过渡: ...

  3. Bootstrap提示框

    前面的话 提示框是一个比较常见的功能,一般来说是鼠标移动到特定元素上时,显示相关的提示语.本文将详细介绍Bootstrap提示框 基本用法 Bootstrap框架中的提示框,结构非常简单,常常使用的是 ...

  4. 关于Mongo的一些坑

    和大多数人一样,从Mysql转到Mongo的过程中,思维上经历了很大的转变.下面来说几点我遇到的坑: 1.单文档16M 这个是最多人碰到的,我也碰到过,当然,幸好是因为操作有误,导致这种不正常的大量数 ...

  5. docker~linux下的部署和基本命令

    回到目录 docker是最近比较流行的容器工具,它可以帮助我们快速部署应用,尤其是在“微服务”环境下,成百个服务要去启动,停止,部署一次太麻烦,而如果把它部署到docker里,下一次应用就方便多了,如 ...

  6. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  7. js模块加载之AMD和CMD

    当我写这篇文章的时候,sea.js已经逐渐退出历史的舞台,详细链接.不过任何新事物的出现都是对旧事物的取其精华,去其糟粕,所以了解一下以前模块的加载也是一件好事. js模块化的原因自不比多说,看看HU ...

  8. for循环问题

    印象中的for语句是这样的,语法:  for (语句 1; 语句 2; 语句 3) { 被执行的代码块 }  语句 1 (代码块)开始前执行 starts. 语句 2 定义运行循环(代码块)的条件 语 ...

  9. 运行Jmeter.bat出错:Not able to find java executor or version. Please check your installation. errorlevel=2

    下载JMeter. 解压后运行Jmeter.bat竟然报错了. 解决办法整理: 方法1: 1.检查JDK环境变量配置: ①系统变量→新增JAVA_HOME. 变量值填写jdk的安装目录(本人是 E:\ ...

  10. nopCommerce 3.9 大波浪系列 之 网页加载Widgets插件原理

    一.插件简介 插件用于扩展nopCommerce的功能.nopCommerce有几种类型的插件如:支付.税率.配送方式.小部件等(接口如下图),更多插件可以访问nopCommerce官网. 我们看下后 ...