Munu组件
Tkinter提供了一个Menu组件,用于实现顶级菜单、下拉菜单和弹出菜单。
实例1:创建一个顶级菜单(或称窗口主菜单)
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8
9 menubar = Menu(root)#创建一个顶级菜单
10 menubar.add_command(label="Hello",command=callback)#创建一个顶级菜单对象
11 menubar.add_command(label="Quit",command=root.quit)
12
13 #显示菜单
14 root.config(menu=menubar)
15
16 mainloop()
实例2:创建添加到主菜单上的下拉菜单
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 #创建一个顶级菜单
9 menubar = Menu(root)
10
11 #创建下拉菜单filemenu包含内容
12 filemenu=Menu(menubar,tearoff=False)#创建一个从属于menubar的子菜单(下拉菜单)filemenu
13 filemenu.add_command(label="打开",command=callback)#创建一个下拉菜单对象
14 filemenu.add_command(label="保存",command=callback)
15 filemenu.add_separator()#插入分隔线
16 filemenu.add_command(label="退出",command=root.quit)
17 #创建一个顶级菜单对象“文件”,filemenu从属于这个对象(或称将filemenu添加到顶级菜单“文件”中)
18 menubar.add_cascade(label="文件",menu=filemenu)
19
20 #创建另一个下拉菜单editmenu包含内容
21 editmenu=Menu(menubar,tearoff=False)#创建一个从属于menubar的子菜单(下拉菜单)editmenu
22 editmenu.add_command(label="剪切",command=callback)
23 editmenu.add_command(label="拷贝",command=callback)
24 editmenu.add_separator()#插入分隔线
25 editmenu.add_command(label="粘贴",command=callback)
26 #创建一个顶级菜单对象“编辑”,editmenu从属于这个对象(或称将editmenu添加到顶级菜单“编辑”中)
27 menubar.add_cascade(label="编辑",menu=editmenu)
28
29 #显示菜单
30 root.config(menu=menubar)
31
32 mainloop()
实例3:创建一个弹出菜单方法
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 def popup(event):
9 menu.post(event.x_root,event.y_root)#在此时鼠标位置弹出显示窗口
10
11 #创建一个顶级菜单menu
12 menu = Menu(root,tearoff=False)
13
14 #创建顶级菜单menu包含内容
15 menu.add_command(label="撤销",command=callback)#创建一个顶级菜单对象
16 menu.add_command(label="重做",command=callback)
17 #创建一个框架
18 frame = Frame(root,width=100,height=100)
19 frame.pack()
20
21 #将鼠标右键与popup方法绑定
22 frame.bind("<Button-3>",popup)
23
24 #显示菜单
25 #root.config(menu=menu)
26
27 mainloop()
实例4:菜单弹出
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 def popup(event):
9 menu.post(event.x_root,event.y_root)#在此时鼠标位置弹出显示窗口
10
11 #创建一个顶级菜单menu
12 menu = Menu(root,tearoff=True)
13
14 #创建顶级菜单menu包含内容
15 menu.add_command(label="撤销",command=callback)#创建一个顶级菜单对象
16 menu.add_command(label="重做",command=callback)
17 #创建一个框架
18 frame = Frame(root,width=500,height=500)
19 frame.pack()
20
21 #将鼠标右键与popup方法绑定
22 frame.bind("<Button-3>",popup)
23
24 #显示菜单
25 #root.config(menu=menu)
26
27 mainloop()
实例5:添加单选组件radiobutton和多选按钮checkbutton
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 #创建一个顶级菜单
9 menubar = Menu(root)
10 #创建checkbutton关联变量
11 openVar = IntVar()
12 saveVar = IntVar()
13 exitVar = IntVar()
14 #创建下拉菜单filemenu包含内容
15 filemenu=Menu(menubar,tearoff=True)#创建一个从属于menubar的子菜单(下拉菜单)filemenu
16 filemenu.add_checkbutton(label="打开",command=callback,variable=openVar)#创建一个下拉菜单对象
17 filemenu.add_checkbutton(label="保存",command=callback,variable=saveVar)
18 filemenu.add_separator()#插入分隔线
19 filemenu.add_checkbutton(label="退出",command=root.quit,variable=exitVar)
20 #创建一个顶级菜单对象“文件”,filemenu从属于这个对象(或称将filemenu添加到顶级菜单“文件”中)
21 menubar.add_cascade(label="文件",menu=filemenu)
22
23 #创建radiobutton关联变量
24 editVar = IntVar()
25 editVar.set(1)
26
27 #创建另一个下拉菜单editmenu包含内容
28 editmenu=Menu(menubar,tearoff=True)#创建一个从属于menubar的子菜单(下拉菜单)editmenu
29 editmenu.add_radiobutton(label="剪切",command=callback,variable=editVar,value=1)
30 editmenu.add_radiobutton(label="拷贝",command=callback,variable=editVar,value=2)
31 editmenu.add_separator()#插入分隔线
32 editmenu.add_radiobutton(label="粘贴",command=callback,variable=editVar,value=3)
33 #创建一个顶级菜单对象“编辑”,editmenu从属于这个对象(或称将editmenu添加到顶级菜单“编辑”中)
34 menubar.add_cascade(label="编辑",menu=editmenu)
35
36 #显示菜单
37 root.config(menu=menubar)
38
39 mainloop()
Menubutton组件(希望菜单按钮出现在其它位置时)
Menubutton组件是一个与Menu组件相关联的按钮,它可以放在窗口中的任意位置,并且在被按下时弹出下拉菜单
实例1:
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 #创建一个顶级菜单Menubutton按钮,设置为浮起显示(RAISED)
9 mb = Menubutton(root,text="点我",relief=RAISED)
10
11 mb.pack(side=RIGHT)#设置为右中显示
12
13 #创建下拉菜单filemenu包含内容
14 filemenu = Menu(mb,tearoff=False)#创建一个从属于mb的下拉菜单filemenu
15 filemenu.add_checkbutton(label="打开",command=callback,selectcolor="yellow")
16 filemenu.add_command(label="保存",command=callback)#创建一个下拉菜单对象"保存“
17 filemenu.add_separator()
18 filemenu.add_command(label="退出",command=root.quit)
19 #显示菜单
20 mb.config(menu=filemenu)
21
22 mainloop()
OptionMenu(选项菜单)组件
选项菜单的发明弥补了Listbox组件无法实现下拉列表框的遗憾
实例1:
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 variable = StringVar()#创建字符串变量variable
9 variable.set("one")#初始值设置为"one"
10 w = OptionMenu(root,variable,"one","two","three")
11 w.pack()
12
13 mainloop()
实例2:多个选项添加到选项菜单中
1 from tkinter import *
2
3 def callback():
4 print("被调用了")
5
6 root = Tk()
7
8 OPTIONS = [
9 "Hadley",
10 "小土豆",
11 "yiwofeiye",
12 "RAN"
13 ]
14
15 variable = StringVar()#创建字符串变量variable
16 variable.set(OPTIONS[0])#初始值设置为"one"
17 w = OptionMenu(root,variable,*OPTIONS)
18 w.pack()
19
20 def callback():
21 print(variable.get())
22
23 Button(root,text="点我",command=callback).pack()
24
25 mainloop()