菜單的分類也較多,通常可以分為下拉菜單、彈出菜單。
1、使用Menu類創建一個菜單
2、add_command添加菜單項,如果該菜單是頂層菜單,則添加的菜單項依次向右添加。 如果該菜單時頂層菜單的一個菜單項,則它添加的是下拉 菜單的菜單項。
屬性:
label:指定菜單的名稱
command:被點擊時調用的方法
acceletor:快捷鍵
underline:是否擁有下划線
3、窗口的menu屬性:指定頂級菜單項
應用場景一:一個最簡單的示例,創建一個頂級菜單窗口。
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from Tkinter import *
#定義一個頂級大窗口
root = Tk()
#在大窗口下定義一個菜單實例
menubar = Menu(root)
#給菜單實例增加菜單項
for each in ['文件','視圖','編輯','關於']:
menubar.add_command(label=each)
#菜單實例應用到大窗口中
root['menu']=menubar
root.mainloop()
效果圖:

應用場景二、為頂級菜單級聯子菜單項
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from Tkinter import *
#定義一個頂級大窗口
root = Tk()
#在大窗口下定義一個頂級菜單實例
menubar = Menu(root)
#在頂級菜單實例下創建子菜單實例
fmenu = Menu(menubar)
for each in ['新建','打開','保存','另存為']:
fmenu.add_command(label=each)
vmenu = Menu(menubar)
#為每個子菜單實例添加菜單項
for each in ['復制','粘貼','剪切']:
vmenu.add_command(label=each)
emenu = Menu(menubar)
for each in ['默認視圖','新式視圖']:
emenu.add_command(label=each)
amenu = Menu(menubar)
for each 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 方法
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from Tkinter import *
#在大窗口生成一個標簽並布局上去
def kong():
Label(root,text='I love Python').pack()
#生成一個大窗口實例
root = Tk()
#生成一個頂級菜單實例
menubar = Menu(root)
#生成頂級菜單實例的菜單項
for x in ['vb','vc','java','python','php']:
menubar.add_command(label=x)
#增加頂級菜單項的同時,綁定一個事件(在root上創建一個標簽並布局上去)
menubar.add_command(label='django',command=kong)
#定義一個事件
def pop(event):
menubar.post(event.x_root,event.y_root)
#在root大窗口綁定一個右鍵事件(在當前坐標上post出一個菜單)
root.bind("<Button-3>",pop)
root.mainloop()
效果圖:
右鍵時會彈出一個菜單,選擇django后,會在root窗口布局一個標簽。

應用場景四:分割線
add_separator():無參數
用於對菜單項中的菜單分類
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from Tkinter import *
#定義一個root大窗口實例
root = Tk()
#在root大窗口定義一個頂級菜單
menuroot = Menu(root)
#在頂級菜單下定義一個子菜單
menusp = Menu(menuroot)
#給子菜單添加菜單項
for x in ['linux','unix','opoos']:
menusp.add_command(label=x)
#給子菜單添加分割線
menusp.add_separator()
#繼續給子菜單添加菜單項
for x 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
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from Tkinter import *
#定義一個root大窗口實例
root = Tk()
#在root大窗口定義一個頂級菜單
menuroot = Menu(root)
#在頂級菜單下定義一個子菜單
menusp = Menu(menuroot)
#給子菜單添加菜單項
for x in ['linux','unix','opoos']:
menusp.add_radiobutton(label=x)
#給子菜單添加分割線
menusp.add_separator()
#繼續給子菜單添加菜單項
for x in ['python','c++','vb','php']:
menusp.add_checkbutton(label=x)
#子菜單綁定到頂級菜單
menuroot.add_cascade(label='lang',menu=menusp)
#root大窗口應用此頂級菜單
root['menu']=menuroot
root.mainloop()
效果圖:
上面是單選效果,下面是多選效果

