顶层窗口菜单
基本构建方法
"""
菜单树(子菜单作为子树)
"""
from Tkinter import * #(python3 是thinter)
top=Menu(win) #win->top-level window
win.config(menu=top) #set its menu option,menu and toplevel are interconnect
file=Menu(top) #the first menu
file.add_command(label='New...',command=notdone,underline=0) #underline:菜单调用的快捷键
file.add_command(label='Open',command=notdone,underline=0)
file.add_command(label='Quit',command=notdone,underline=0)
top.add_cascade(label='File',menu=file,underline=0) #串行添加菜单
edit=Menu(top,tearoff=False) #tearoff->虚分割线
edit.add_command(label='Cut',command=notdone,underline=0)
edit.add_command(label='Paste',command=notdone,underline=0)
edit.add_separator()
top.add_cascade(label='Edit',menu=edit,underline=0) #串行添加菜单
submenu=Menu(edit,tearoff=True) #添加子菜单
submenu.add_command(label='Spam',command=win.quit,underline=0)
submenu.add_command(label='Eggs',command=notdone,underline=0)
edit.add_cascade(label='Stuff',menu=submenu,underline=0)
基于Frame和MenuButton的菜单
基本构建方法
#与顶层窗口菜单大同小异
menubar=Frame(parent) #母组件
menubar.pack() #菜单框架
"""
每个菜单都是一个菜单按钮对象
"""
fbutton=Menubutton(menubar,text='File',underline=0)
fbutton.pack()
file=Menu(fbutton)
file.add_command(label='New...',command=notdone,underline=0)
file.add_command(label='Open...',command=notdone,underline=0)
file.add_command(label='Quit..',command=notdone,underline=0)
fbutton.config(menu=file)
ebutton=Menubutton(menubar,text='Edit',underline=0)
ebutton.pack(side=LEFT)
edit=Menu(ebutton,tearoff=False)
edit.add_command(label='Cut',command=notdone,underline=0)
edit.add_command(label='Paste',command=notdone,underline=0)
edit.add_separator()
ebutton.config(menu=edit)
submenu=Menu(edit,tearoff=True) #然而这里依旧是顶层窗口的菜单树
submenu.add_command(label='Cut',command=notdone,underline=0)
submenu.add_command(label='Paste',command=notdone,underline=0)
edit.add_cascade(label='Stuff',menu=submenu,underline=0)
优点:
因为是基于框架的,所以可以作为大型界面的内嵌部件
基于OptionMenu的选择菜单
基本构造方法
root=Tk()
var=StringVar()
var.set('spam') #设定初始值
opt=OptionMenu(root,var,'spam','eggs','toast')
opt.pack(fill=X)
#通过var.get()获取初值