GUI tkinter (Menu)菜单项篇
"""
添加顶层菜单:
1、我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口
2、然后我们可以用add_command方法来为它添加菜单项,
如果该菜单是顶层菜单,则添加的菜单项依次向右添加。
如果该菜单是顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。
3、add_command 中的参数常用的有 label 属性,用来指定的 是菜单项的名称,command 属性用来指定被点击的时候调用的方法,
acceletor 属性指定的是快捷键,underline 属性 是是否拥有下划线。
4、最后可以用窗口的 menu 属性指定我们使用哪一个作为它 的顶层菜单。 ************有子菜单的情况*************
1、如果有子菜单,则情况稍微复杂点,这个时候,我们需 要使用 add_cascade,cascade 可以理解为“级联”,即它 的作用只是为了引出后面的菜单。
2、add_cascade 的一个很重要的属性就是 menu 属性,它指 明了要把那个菜单级联到该菜单项上,当然,还必不可少 的就是 label 属性,用于指定该菜单项的名称。
3、我们先新建一个 Menu 的实例,然后使用 add_command 来 添加菜单项,这样等该菜单建立完毕,我们要把它作为另 一个菜单项的子菜单,就需要使用 add_cascade 方法 """ from tkinter import * root = Tk()
root.wm_title("菜单")
root.geometry("400x300+300+100") menubar = Menu(root) # for item in ['文件','编辑','视图','关于']:
# # add_command 添加菜单项
# menubar.add_command(label = item) fmenu = Menu(menubar)
for item in ['新建','打开','保存','另存为']:
fmenu.add_command(label = item) emenu = Menu(menubar)
for item in ['复制','粘贴','剪切']:
emenu.add_command(label = item) vmenu = Menu(menubar)
for item in ['默认视图','新式视图']:
vmenu.add_command(label = item) amenu = Menu(menubar)
for item in ['版权信息','其他说明']:
amenu.add_command(label = item) menubar.add_cascade(label = "文件",menu = fmenu)
menubar.add_cascade(label = "编辑",menu = emenu)
menubar.add_cascade(label = "视图",menu = vmenu)
menubar.add_cascade(label = "关于",menu = amenu) # 这两种方法都可以
root['menu']= menubar
# root.config(menu=menubar)#将root根窗口的顶级菜单设置为menu
root.mainloop()
运行结果如下:
"""
************弹出菜单*****************
1.弹出菜单又叫“上下文菜单”,也叫“右键菜单”,它 通常是鼠标单击右键产生的菜单,因此会有“右键菜单” 的说法。
2.其实很多界面库里面都是给出了弹出菜单的简单的制作 方法的,但是 tkinter 里面我们却只能使用比较原始的事 件绑定的方式去做。
3.大体思路就是:我们先新建一个菜单,然后向菜单项中 添加各种功能,最后我们监听鼠标右键消息,如果是鼠标 右键被单击,此时可以根据需要判断下鼠标位置来确定是 哪个弹出菜单被弹出,然后使用 Menu 类的 pop 方法来弹出 菜单。 ************提前说明*************
1.Menu 类里面有一个 post 方法,它接收两个参数,即 x 和 y 坐标,它会在相应的位置弹出菜单。
2.还记得用 bind 方法来绑定事件吗?而且要记得鼠标右键 是用的<Button-3>。 """ from tkinter import * def test():
global root
Label(root,text = "测试").pack() root = Tk()
menubar = Menu(root) for x in ['vb','c','java','php']:
menubar.add_command(label = x) menubar.add_command(label = 'python',command = test) # 插入分割线
# 插入分割线和插入正常的菜单项操作很相似,只是使用 的方法是 add_separator,该方法无需参数。
menubar.add_separator() def pop(event):
menubar.post(event.x_root,event.y_root) root.bind("<Button-3>",pop)
root.mainloop()
"""
**************checkbutton 与 radiobutton********
1.checkbutton 原本是指“复选按钮”,radiobutton 原本 是指“单选按钮”。
2.单选按钮与复选按钮是相对来说的,即在这一组中,单 选按钮中只能有一个是被选定的,即一个人的性别是女的, 就一定不是男的,但是复选按钮对应的情况则是可以有多 个同时被选定,比如一个人即可以喜欢篮球,也可以喜欢 足球,还有可能喜欢乒乓球,等等。
3.在菜单中,也有类似的概念,即单选菜单和复选菜单。 它们分别用 add_radiobutton 和 add_checkbutton 来分别 添加。
4.这两种菜单都是如果一旦被选定,那么前面会有一个类 似于对号的标记出现,checkbutton 可以多个同时被选定, 但是 radiobutton 却只能被选定一个,即这个被选定了, 会自动取消前一个的选定。 """ from tkinter import * root = Tk()
m = Menu(root)
m2 = Menu(m)
for item in ['python','perl','php','ruby']:
m2.add_checkbutton(label = item)
m2.add_separator() for item in ['java','c++','c']:
m2.add_radiobutton(label = item) m.add_cascade(label = 'lan',menu = m2)
root['menu'] = m
root.mainloop()
运行结果如下:
GUI tkinter (Menu)菜单项篇的更多相关文章
- menu菜单项和menubutton菜单按钮的结合使用
<!--创建需要显示的菜单按钮(munebutton),menu指定的是菜单项--><a href="javascript:void(0)" id="m ...
- Android Studio —— 创建Menu菜单项
大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:
- [MFC] 对话框菜单项Menu选中打勾(单选,多选)
近期需要实现一个功能:MFC对话框中,一项菜单下有五个菜单项,改变菜单项选中状态,每次只能选择其中一个打勾.(单选) 然后在网上搜了下资料,稍微总结下,以防后面用到. 1.单选实现: CMenu* m ...
- 菜单项(Menu)的初步认识 以及 多级菜单(SubMenu)的初步认识
MainActivity.class public class MainActivity extends AppCompatActivity { private TextView textView; ...
- tkinter menu
python] view plain copy '''''Tkinter教程之Menu篇''' '''''1.创建一个简单的Menu''' # 添加菜单hello和quit,将hello菜单与hell ...
- 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项
<!--禁用微信分享按钮--> <script> function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu' ...
- 【crunch bang】 增加“菜单项”
[右键菜单]->[Settings]->[Openbox]->[GUI Menu Editor] 挑选合适的位置,增加[菜单项],编辑内容.
- Android简易实战教程--第二十三话《绚丽的菜单项》
转载本博客请注明出处:点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52327456 今天这篇稍微增强点代码量,可能要多花上5分钟喽 ...
- python gui tkinter用法杂记
1.treeview遍历 iids = tree.selection() t = tree.get_children() for i in t: print(tree.item(i,'values') ...
随机推荐
- springboot中动态修改log4j2日志级别
springboot中动态修改log4j2日志级别 在spring boot中使用log4j2日志时,项目运行中,想要修改日志级别. 1.pom.xml依赖: <dependency> & ...
- 六星教育php vip视频(分享)
最近看的一个swoole的课程,应该也算是vip课程了,不是公开的直播课 比较有特点有一定深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. ...
- 3.httphandler和httpmodule各种的作用以及工作原理?
首先应该知道的是ASP.NET 请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET 把http请求依次传递给管道中各个HttpModul ...
- 【第二十二篇】从客户端中检测到有潜在危险的 Request.Form 值
提交数据的时候 用js的方法 escape(富文本框的值) 例:escape(UM.getEditor('Content').getContent()); 取值的时候 unescape ...
- spring mvc Response header content type
Xml代码 <bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAd ...
- Linux MySQL-5.7 root初始密码修改
操作系统为centos7 64 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2. ...
- C++程序设计学习
第一章 预备知识 1.C++历史起源 由于C语言具有许多优点,比如语言简洁灵活:运算符和数据类型丰富:具有结构化控制语句:程序执行效率高:同时具有高级语言和汇编语言的优点等.与其他高级语言相比,C语言 ...
- Linux之正则表达式grep
真好!
- PTA A1013
第七天 A1013 Battle Over Cities (25 分) 题目内容 It is vitally important to have all the cities connected by ...
- Spring入门教程
Spring新手入门教程,配套下面这两个大神的课程就可以了. 一个是Spring视频教程. 一个是Spring博客教程. https://www.imooc.com/learn/196 http:// ...