[Python] wxPython 菜单栏控件学习总结(原创)
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 菜单栏控件学习总结(原创)的更多相关文章
- [Python] wxPython 基本控件 (转)
转自:http://www.cnblogs.com/wangjian8888/p/6028777.html 一.静态文本控件 wx.StaticText(parent, id, label, pos= ...
- [Python] wxPython 编辑框组件学习总结 (原创)
1.总结 1.常用4种 编辑框 的构造 1.普通编辑框 单行输入的简单编辑框 (?为所在框的对象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密码编辑框 ...
- python之Tkinter控件学习
转载自 http://www.cnblogs.com/kaituorensheng/p/3287652.html#_label0 阅读目录 1. 产品介绍 2. 设计规划 3. 相关知识 4. 源码 ...
- Python Tkinter 基础控件学习
# -*- coding: utf-8 -*- from Tkinter import * def btn_click(): b2['text'] = 'clicked' evalue = e.get ...
- wxPython控件学习之wx.grid.Grid 表格控件
wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEdit ...
- 转)delphi chrome cef3 控件学习笔记 (二)
(转)delphi chrome cef3 控件学习笔记 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原创 2016 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- DevExpress控件学习总结(转)
DevExpress控件学习总结 1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹 ...
- Python Tkinter基础控件入门实例
分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...
随机推荐
- angular4.0 父子组建之间的相互通信
父组建---->子组建 传递信息 首先先通过angular脚手架生成两个基本组件,有一个好处是 会自动关联到跟模版,节约时间,而且还是偷懒 ng generate component compo ...
- [图形学] 习题8.12 NLN二维线段裁剪算法实现
Nicholl-Lee-Nicholl二维线段裁剪算法相对于Cohen-Sutherland和Liang-Barsky算法来说,在求交点之前进行了线段端点相对于几个区域的判断,可以确切的知道要求交点的 ...
- TCP 连接重置漏洞 - CVE-2004-0230讲解
TCP 连接重置漏洞 - CVE-2004-0230: IPv6 实施中存在一个拒绝服务漏洞,该漏洞可能允许攻击者向受影响系统发送特制的 TCP 消息. 成功利用此漏洞的攻击者可能会导致受影响系统重置 ...
- Struts2配置拦截器自定义栈时抛异常:Unable to load configuration. - interceptor-ref - file:/D:/tomcat_install/webapps/crm/WEB-INF/classes/struts.xml
代码如下: <interceptors> <!-- 注册自定义拦截器 --> <interceptor name="LoginInterceptor&qu ...
- Linux常见命令语句
查看当前目录: pwd 查看文件具体大小: ls -l 返回上一级: cd.. 返回根目录: cd / 创建一个隐藏文件 vim .test 显示隐藏文件:ls -a 编辑文件: 1.vim 文件名 ...
- 不同浏览器创建 ajax XMLHTTPRequest对象的方法及兼容性问题总结
XMLHttpRequest 对象是AJAX功能的核心,要开发AJAX程序必须从了解XMLHttpRequest 对象开始. 了解XMLHttpRequest 对象就先从创建XMLHttpReques ...
- Android - 自定义控件之圆形控件
自定义控件 - 圈圈 Android L: Android Studio 效果:能够自定义圆圈半径和位置:设定点击效果:改变背景颜色 下面是demo图 点击前: 点击后: 自定义控件一般要继承View ...
- 浅谈redux-form在项目中的运用
准则 先说一下redux的使用场景,因为如果没有redux,那更不会有redux-form. redux基于Flux架构思想,是一个状态管理框架,其目标是解决单页面应用中复杂的状态管理问题. 日常前端 ...
- 回味Python2.7——笔记1
一.基本知识 1.一个值可以同时赋给几个变量: >>> x = y = z = 0 # Zero x, y and z >>> x 0 >>> y ...
- (转)SimpleDateFormat使用
1 SimpleDateFormat public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格式化 ...