TKinter之菜單


菜單的分類也較多,通常可以分為下拉菜單、彈出菜單。

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()

 效果圖:

上面是單選效果,下面是多選效果





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM