1、*菜单
1)我们可以使⽤ Menu 类来新建⼀个菜单, Menu 和其他的组件⼀样,第⼀个是parent ,这⾥通常可以为窗⼝;
2) 然后我们可以⽤ add_commmand ⽅法来为它添加菜单项, 如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的⼀个菜单项,则它添加的是下拉 菜单的菜单项;
3) add_command 中的参数常⽤的有 label 属性,⽤来指定的 是菜单项的名称, command属性⽤来指定被点击的时候调⽤ 的⽅法, acceletor 属性指定的是快捷键, underline 属性 是是否拥有下划线;
4) 最后可以⽤窗⼝的 menu 属性指定我们使⽤哪⼀个作为它 的顶层菜单。
from tkinter import *
root = Tk()
root.geometry("400x300")
#创建一个菜单对象
menuBar = Menu(root)
#添加菜单项
for item in ["⽂件", "编辑", "视图", "关于"]:
menuBar.add_command(label = item)
#指定*菜单
root["menu"] = menuBar
root.mainloop()
2、子菜单
1)如果有⼦菜单,则情况稍微复杂点,这个时候,我们需 要使⽤ add_cascade ,cascade 可以理解为“级联”,即它 的作⽤只是为了引出后⾯的菜单;
2)add_cascade 的⼀个很重要的属性就是 menu 属性,它指 明了要把那个菜单级联到该菜单项上,当然,还必不可少 的就是 label 属性,⽤于指定该菜单项的名称;
3.)我们先新建⼀个 Menu 的实例,然后使⽤ add_command 来 添加菜单项,这样等该菜单建⽴完毕,我们要把它作为另 ⼀个菜单项的⼦菜单,就需要使⽤ add_cascade ⽅法。
from tkinter import *
root = Tk()
root.geometry("400x300")
menuBar = Menu(root)
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.mainloop()
3、分割线
1) 有时候,⼀个菜单项的各个菜单可能并不是⼀个类型, 有可能是两种类型,在它们中间可以插⼀个分割线来界定 界限;
2) 插⼊分割线和插⼊正常的菜单项操作很相似,只是使⽤ 的⽅法是 add_separator,该⽅法⽆需参数;
from tkinter import *
root = Tk()
root.geometry("400x300")
root.title("IT大分类")
menuBar = Menu(root)
sonMenu = Menu(menuBar)
for each in ["C/C++", "Python", "JavaEE", "Android", "iOS", "云计算"]:
sonMenu.add_command(label = each)
sonMenu.add_separator() # 插⼊分割线
for each in ["PHP", "UI设计", "前端与移动开发", "⽹络营销"]:
sonMenu.add_command(label = each)
menuBar.add_cascade(label = "IT大产业", menu = sonMenu)
root["menu"] = menuBar
root.mainloop()