"""
添加顶层菜单:
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)菜单项篇的更多相关文章

  1. menu菜单项和menubutton菜单按钮的结合使用

    <!--创建需要显示的菜单按钮(munebutton),menu指定的是菜单项--><a href="javascript:void(0)" id="m ...

  2. Android Studio —— 创建Menu菜单项

    大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:

  3. [MFC] 对话框菜单项Menu选中打勾(单选,多选)

    近期需要实现一个功能:MFC对话框中,一项菜单下有五个菜单项,改变菜单项选中状态,每次只能选择其中一个打勾.(单选) 然后在网上搜了下资料,稍微总结下,以防后面用到. 1.单选实现: CMenu* m ...

  4. 菜单项(Menu)的初步认识 以及 多级菜单(SubMenu)的初步认识

    MainActivity.class public class MainActivity extends AppCompatActivity { private TextView textView; ...

  5. tkinter menu

    python] view plain copy '''''Tkinter教程之Menu篇''' '''''1.创建一个简单的Menu''' # 添加菜单hello和quit,将hello菜单与hell ...

  6. 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项

    <!--禁用微信分享按钮--> <script> function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu' ...

  7. 【crunch bang】 增加“菜单项”

    [右键菜单]->[Settings]->[Openbox]->[GUI Menu Editor] 挑选合适的位置,增加[菜单项],编辑内容.

  8. Android简易实战教程--第二十三话《绚丽的菜单项》

    转载本博客请注明出处:点击打开链接  http://blog.csdn.net/qq_32059827/article/details/52327456 今天这篇稍微增强点代码量,可能要多花上5分钟喽 ...

  9. python gui tkinter用法杂记

    1.treeview遍历 iids = tree.selection() t = tree.get_children() for i in t: print(tree.item(i,'values') ...

随机推荐

  1. springboot中动态修改log4j2日志级别

    springboot中动态修改log4j2日志级别 在spring boot中使用log4j2日志时,项目运行中,想要修改日志级别. 1.pom.xml依赖: <dependency> & ...

  2. 六星教育php vip视频(分享)

    最近看的一个swoole的课程,应该也算是vip课程了,不是公开的直播课 比较有特点有一定深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. ...

  3. 3.httphandler和httpmodule各种的作用以及工作原理?

    首先应该知道的是ASP.NET 请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET 把http请求依次传递给管道中各个HttpModul ...

  4. 【第二十二篇】从客户端中检测到有潜在危险的 Request.Form 值

    提交数据的时候  用js的方法   escape(富文本框的值)    例:escape(UM.getEditor('Content').getContent()); 取值的时候   unescape ...

  5. spring mvc Response header content type

    Xml代码 <bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAd ...

  6. Linux MySQL-5.7 root初始密码修改

    操作系统为centos7 64 1.修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2. ...

  7. C++程序设计学习

    第一章 预备知识 1.C++历史起源 由于C语言具有许多优点,比如语言简洁灵活:运算符和数据类型丰富:具有结构化控制语句:程序执行效率高:同时具有高级语言和汇编语言的优点等.与其他高级语言相比,C语言 ...

  8. Linux之正则表达式grep

    真好!

  9. PTA A1013

    第七天 A1013 Battle Over Cities (25 分) 题目内容 It is vitally important to have all the cities connected by ...

  10. Spring入门教程

    Spring新手入门教程,配套下面这两个大神的课程就可以了. 一个是Spring视频教程. 一个是Spring博客教程. https://www.imooc.com/learn/196 http:// ...