GUI tkinter (Menu)菜單項篇


"""
添加頂層菜單:
1、我們可以使用Menu類來新建一個菜單,Menu和其他的組件一樣,第一個是parent,這里通常可以為窗口
2、然后我們可以用add_command方法來為它添加菜單項,
如果該菜單是頂層菜單,則添加的菜單項依次向右添加。
如果該菜單是頂層菜單的一個菜單項,則它添加的是下拉菜單的菜單項。
3、add_command 中的參數常用的有 label 屬性,用來指定的 是菜單項的名稱,command 屬性用來指定被點擊的時候調用的方法,
acceletor 屬性指定的是快捷鍵,underline 屬性 是是否擁有下划線。
4、最后可以用窗口的 menu 屬性指定我們使用哪一個作為它 的頂層菜單。



************有子菜單的情況*************
1、如果有子菜單,則情況稍微復雜點,這個時候,我們需 要使用 add_cascade,cascade 可以理解為“級聯”,即它 的作用只是為了引出后面的菜單。
2、add_cascade 的一個很重要的屬性就是 menu 屬性,它指 明了要把那個菜單級聯到該菜單項上,當然,還必不可少 的就是 label 屬性,用於指定該菜單項的名稱。
3、我們先新建一個 Menu 的實例,然后使用 add_command 來 添加菜單項,這樣等該菜單建立完畢,我們要把它作為另 一個菜單項的子菜單,就需要使用 add_cascade 方法

"""

from tkinter import *

root = Tk()
root.wm_title("菜單")
root.geometry("400x300+300+100")

menubar = Menu(root)

# for item in ['文件','編輯','視圖','關於']:
# # add_command 添加菜單項
# menubar.add_command(label = item)

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.config(menu=menubar)#將root根窗口的頂級菜單設置為menu
root.mainloop()
運行結果如下:

 


"""
************彈出菜單*****************
1.彈出菜單又叫“上下文菜單”,也叫“右鍵菜單”,它 通常是鼠標單擊右鍵產生的菜單,因此會有“右鍵菜單” 的說法。
2.其實很多界面庫里面都是給出了彈出菜單的簡單的制作 方法的,但是 tkinter 里面我們卻只能使用比較原始的事 件綁定的方式去做。
3.大體思路就是:我們先新建一個菜單,然后向菜單項中 添加各種功能,最后我們監聽鼠標右鍵消息,如果是鼠標 右鍵被單擊,此時可以根據需要判斷下鼠標位置來確定是 哪個彈出菜單被彈出,然后使用 Menu 類的 pop 方法來彈出 菜單。

************提前說明*************
1.Menu 類里面有一個 post 方法,它接收兩個參數,即 x 和 y 坐標,它會在相應的位置彈出菜單。
2.還記得用 bind 方法來綁定事件嗎?而且要記得鼠標右鍵 是用的<Button-3>。

"""

from tkinter import *

def test():
global root
Label(root,text = "測試").pack()

root = Tk()
menubar = Menu(root)

for x in ['vb','c','java','php']:
menubar.add_command(label = x)

menubar.add_command(label = 'python',command = test)

# 插入分割線
# 插入分割線和插入正常的菜單項操作很相似,只是使用 的方法是 add_separator,該方法無需參數。
menubar.add_separator()

def pop(event):
menubar.post(event.x_root,event.y_root)

root.bind("<Button-3>",pop)
root.mainloop()




"""
**************checkbutton 與 radiobutton********
1.checkbutton 原本是指“復選按鈕”,radiobutton 原本 是指“單選按鈕”。
2.單選按鈕與復選按鈕是相對來說的,即在這一組中,單 選按鈕中只能有一個是被選定的,即一個人的性別是女的, 就一定不是男的,但是復選按鈕對應的情況則是可以有多 個同時被選定,比如一個人即可以喜歡籃球,也可以喜歡 足球,還有可能喜歡乒乓球,等等。
3.在菜單中,也有類似的概念,即單選菜單和復選菜單。 它們分別用 add_radiobutton 和 add_checkbutton 來分別 添加。
4.這兩種菜單都是如果一旦被選定,那么前面會有一個類 似於對號的標記出現,checkbutton 可以多個同時被選定, 但是 radiobutton 卻只能被選定一個,即這個被選定了, 會自動取消前一個的選定。

"""

from tkinter import *

root = Tk()
m = Menu(root)
m2 = Menu(m)
for item in ['python','perl','php','ruby']:
m2.add_checkbutton(label = item)
m2.add_separator()

for item in ['java','c++','c']:
m2.add_radiobutton(label = item)

m.add_cascade(label = 'lan',menu = m2)
root['menu'] = m
root.mainloop()
運行結果如下:
 

 


免責聲明!

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



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