菜单的分类也较多,通常可以分为下拉菜单、弹出菜单。
1、使用Menu类创建一个菜单
2、add_command添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉 菜单的菜单项。
属性:
label:指定菜单的名称
command:被点击时调用的方法
acceletor:快捷键
underline:是否拥有下划线
3、窗口的menu属性:指定顶级菜单项
应用场景一:一个最简单的示例,创建一个顶级菜单窗口.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ fromTkinter import * #定义一个顶级大窗口 root = Tk() #在大窗口下定义一个菜单实例 menubar = Menu(root) #给菜单实例增加菜单项 foreach in['文件','视图','编辑','关于']: menubar.add_command(label=each) #菜单实例应用到大窗口中 root['menu']=menubar root.mainloop() |
效果图:
应用场景二、为顶级菜单级联子菜单项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ fromTkinter import * #定义一个顶级大窗口 root = Tk() #在大窗口下定义一个顶级菜单实例 menubar = Menu(root) #在顶级菜单实例下创建子菜单实例 fmenu = Menu(menubar) foreach in['新建','打开','保存','另存为']: fmenu.add_command(label=each) vmenu = Menu(menubar) #为每个子菜单实例添加菜单项 foreach in['复制','粘贴','剪切']: vmenu.add_command(label=each) emenu = Menu(menubar) foreach in['默认视图','新式视图']: emenu.add_command(label=each) amenu = Menu(menubar) foreach in['版权信息','联系我们']: amenu.add_command(label=each) #为顶级菜单实例添加菜单,并级联相应的子菜单实例 menubar.add_cascade(label='文件',menu=fmenu) menubar.add_cascade(label='视图',menu=vmenu) menubar.add_cascade(label='编辑',menu=emenu) menubar.add_cascade(label='关于',menu=amenu) #顶级菜单实例应用到大窗口中 root['menu']=menubar root.mainloop() |
效果图:
应用场景三、右键菜单
1.Menu 类里面有一个 post 方法,它接收两个参数,即 x 和 y 坐标,它会在相应的位置弹出菜单。
2.利用 Menu 的 post 方法,还有 bind 方法
+ View Code
效果图:
右键时会弹出一个菜单,选择django后,会在root窗口布局一个标签。
应用场景四:分割线
1 | add_separator():无参数 |
用于对菜单项中的菜单分类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ fromTkinter import * #定义一个root大窗口实例 root = Tk() #在root大窗口定义一个顶级菜单 menuroot = Menu(root) #在顶级菜单下定义一个子菜单 menusp = Menu(menuroot) #给子菜单添加菜单项 forx in['linux','unix','opoos']: menusp.add_command(label=x) #给子菜单添加分割线 menusp.add_separator() #继续给子菜单添加菜单项 forx in['python','c++','vb','php']: menusp.add_command(label=x) #子菜单绑定到顶级菜单 menuroot.add_cascade(label='lang',menu=menusp) #root大窗口应用此顶级菜单 root['menu']=menuroot root.mainloop() |
效果图:
应用场景五:单选框(add_radiobutton)与复选框(add_checkbutton)
代码与上面的分割线类似,只是将add_command改为了add_radiobutton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ fromTkinter import * #定义一个root大窗口实例 root = Tk() #在root大窗口定义一个顶级菜单 menuroot = Menu(root) #在顶级菜单下定义一个子菜单 menusp = Menu(menuroot) #给子菜单添加菜单项 forx in['linux','unix','opoos']: menusp.add_radiobutton(label=x) #给子菜单添加分割线 menusp.add_separator() #继续给子菜单添加菜单项 forx in['python','c++','vb','php']: menusp.add_checkbutton(label=x) #子菜单绑定到顶级菜单 menuroot.add_cascade(label='lang',menu=menusp) #root大窗口应用此顶级菜单 root['menu']=menuroot root.mainloop() |
效果图:
上面是单选效果,下面是多选效果