TKinter之菜单 - 孔扎根 - 博客园(转载)

菜单的分类也较多,通常可以分为下拉菜单、弹出菜单。

1、使用Menu类创建一个菜单

2、add_command添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加。 如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉 菜单的菜单项。

  属性:  

    label:指定菜单的名称

    command:被点击时调用的方法

    acceletor:快捷键

    underline:是否拥有下划线

3、窗口的menu属性:指定顶级菜单项

应用场景一:一个最简单的示例,创建一个顶级菜单窗口.
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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()
  效果图:
应用场景二、为顶级菜单级联子菜单项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/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 方法

+ View Code

  效果图:

右键时会弹出一个菜单,选择django后,会在root窗口布局一个标签。
应用场景四:分割线
1
add_separator():无参数
用于对菜单项中的菜单分类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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()
 效果图:

上面是单选效果,下面是多选效果




猜你喜欢

转载自blog.csdn.net/qq_39401420/article/details/80871408