logo头像

学如逆水行舟

Tkinter之Menu组件用法

Tkinter之Menu组件用法

开发工具类桌面应用使用Python、Java这类语言是一种不错的选择,他们的GUI库都可以很好的支持跨平台特性。本系列博客主要总结Tkinter库中提供的UI组件,关于Java的GUI开发,感兴趣的可以在如下系列博客中找到:

https://my.oschina.net/u/2340880/blog?catalog=5647945&temp=1509528194945

Tkinter中有提供Menu菜单组件中可以添加如下几种组件:

1_动作项:简单的行为按钮,用户点击后会执行相应的方法。

2_子菜单:行为完整的子菜单项。

3_控制按钮:可有选中与非选中状态,用来做开关。

4_单选列表:一组单选按钮。

为一个窗口添加菜单十分容易,示例代码如下:
1
2
3
4
5
6
7
8
9
10
root = Tk()
rootMenu = Menu(root)
root.config(menu=rootMenu)

item = Menu(master=rootMenu,postcommand=call,tearoff=1)
rootMenu.add_cascade(menu=item,label="File")
item.add_command(label='new File')
subItem = Menu(item)
subItem.add_command(label="Open in noew window")
item.add_cascade(menu=subItem,label="Open")

效果如下图所示:

Menu构造函数中第1个参数可以传入菜单所属的窗口或者父菜单,后面可以添加一些菜单配置,例如:

| 属性 | 意义 |
| activebackground | 活跃时的背景色 |
| activeborderwidth | 活跃时的边框宽度 |
| activeforeground | 活跃时的前景色 |
| bg 或者 background | 正常状态背景色 |
| bd 或者 borderwidth | 正常状态变宽宽度 |
| cursor | 鼠标样式 |
| disabledforeground | 无效状态的前景色 |
| font | 菜单字体 |
| fg 或者 foreground | 正常状态的前景色 |
| postcommand | 设置菜单被唤出时的回调 |
| relief | 设置菜单浮雕效果 |
| selectcolor | 设置菜单选中颜色 |
| tearoff | 可以设置为0和1,表示此菜单是否可以独立出来 |
| tearoffcommand | 菜单独立被触发时的回调 |
| title | 可设置独立菜单的标题 |

需要注意,在MacOS系统上,菜单的样式是由系统维护的,上面的大多属性都将没有效果。

下面这些方法用来进行菜单配置:
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
36
37
38
39
#添加一个子菜单 coption为配置选项
add_cascade(coption...)
#添加一个切换按钮 coption为配置选项
add_checkbutton(coption...)
#添加一个功能按钮 coption为配置选项
add_command(coption...)
#添加一个单选按钮 coption为配置选项
add_radiobutton(coption...)
#添加一个分割线
add_separator()
#删除index1 到 index2之间的选项
delete(index1,index2)
#获取菜单某一项的属性值
entrycget(index,coption)
#重新配置菜单中某项的属性
entryconfigure(index,coption...)
#返回参数位置对应的选项索引
index(i)
#在指定位置插入一个子菜单
insert_cascade(index,coption...)
#在指定位置插入一个切换按钮
insert_checkbutton(index,coption...)
#在指定位置插入一个功能按钮
insert_command(index,coption...)
#在指定位置插入一个单选按钮
insert_radiobutton(index,coption...)
#在指定位置插入一个分割线
insert_separator(index)
#代码手动调用一次某个选项
invoke(index)
#在窗口指定位置弹出菜单
post(x,y)
#获取个选项的类型
type(index)
#获取某个选项距离菜单顶部的偏移量
yposition(n)
#添加一个选项 可以是功能按钮,切换按钮,单选按钮或子菜单,由类型确认
#类型可选 cascade checkbutton command radiobutton separator
add(kind,coption)

上面列举方法中的coption用来进行一些配置项的设置,可选配置项如下:

| 属性名 | 意义 |
| accelerator | 设置快捷键 |
| activebackground | 激活状态背景色 |
| activeforeground | 激活状态前景色 |
| background | 正常状态背景色 |
| bitmap | 设置bitmap图标 |
| columnbreak | 设置分列 |
| command | 设置激活时的回调函数 |
| compound | 设置展示文本和图标是的布局方式 |
| font | 设置字体 |
| foreground | 设置正常状态的前景色 |
| hidemargin | 设置是否隐藏外边距 设置True或False |
| image | 设置图片 gif格式 |
| label | 设置显示的文本 |
| menu | 这个选项只用在添加子菜单中 |
| offvalue | 设置checkbutton关闭时的值 |
| onvalue | 设置checkbutton开启时的值 |
| selectcolor | 设置选中状态的颜色 |
| selectimage | 设置选中状态的图像 |
| state | 设置选项状态,DISABLED或ACTIVE |
| underline | 设置下划线 |
| value | 选项的值 |
| variable | 用于单选按钮或切换按钮 |