[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 ...
随机推荐
- oracle批量数据导入工具 sqlldr
sqlldr工具参数: [oracle@server ~]$ sqlldr SQL*Loader: Release - Production on Wed Nov :: Copyright (c) , ...
- 【No JSON object could be decoded】问题解决
本人使用爬虫从某数据库中下载了一批数据,本地存为json格式(pgp.json)然后使用python中的json模块进行解析(json.load),一直出现下述错误 从google中查找到了同样错误的 ...
- PYC#1欢乐赛第三题题解
这里是比赛地址:http://tieba.baidu.com/p/2859693237,果然参赛神牛汇集. 第三题题目大意如下: 已知n条二次函数曲线Si(x)=aix^2+bix+ci(ai> ...
- Java String charAt()方法
描述 此方法返回位于字符串的指定索引处的字符.该字符串的索引从零开始. 语法 此方法定义的语法如下: public char charAt(int index) 参数 这里是参数的细节: index ...
- IDEA的热部署插件jrebel6.4.3版离线安装版配置与破解
JRebel 介绍 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费不少生命啊.目前对于idea热部署最好的解决方案就是安装JRebel插件 ...
- 第2章 rsync(二):inotify+rsync详细说明和sersync
本文目录: inotify+rsync 1.1 安装inotify-tools 1.2 inotifywait命令以及事件分析 1.3 inotify应该装在哪里 1.4 inotify+rsync示 ...
- (转)java.util.Scanner应用详解
java.util.Scanner应用详解 java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java ...
- 【Django】中间件
Middleware 这个地方把所有Request 拦截住,用我们自己的方式完成处理以后直接返回 Response.因此了解中间件的构成是非常必要的. Initializer: __init__(se ...
- Linux安装搜狗输入法教程
最近开始学习linux 在安装输入法中遇到的一些问题,最终成功安装,也得益于网络上的前辈写的文章,现在将全部安装步骤以及遇到的一些问题总结如下: 基本上分三步走 1,添加fcitx的键盘输入法系统 ...
- C#的基础数据类型
一.概述 C# 的类型系统是统一的,因此任何类型的值都可以按对象处理.C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类.C#的数据类型主要分为三类:值 ...