python遍历tk菜单项的名字
直接上代码:
from tkinter import *
def print_menu_items(menu):
num_items = menu.index('end') # 最后一个菜单项的索引
for index in range(num_items+1): # 遍历所有的菜单项
item_type = menu.type(index) # 获取菜单项的类型
# 菜单项的类型可以是'command'、'cascade'、'checkbutton'、'radiobutton'、'separator'或者'tearoff'。
# tearoff==1, 表示菜单可以被撕下来变成一个单独窗口
if item_type == 'cascade': # 表示拥有子菜单的菜单项
# entrycget函数的作用是获取指定选项的名称
name = menu.entrycget(index, 'menu') # 获得菜单项的内部名称, 形如: .!menu.!menu
submenu = menu.nametowidget(name) # 获得菜单项对象
print('Cascade Menu:', menu.entrycget(index, 'label')) # 菜单项的名称
print_menu_items(submenu) # 递归调用, 打印菜单名字
elif item_type == 'command': # 菜单项类型
print('Menu Item:', menu.entrycget(index, 'label')) # 打印菜单名字
root = Tk()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New")
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Save as...")
filemenu.add_command(label="Close")
submenu = Menu(filemenu, tearoff=0)
submenu.add_command(label="Submenu 1")
submenu.add_command(label="Submenu 2")
filemenu.add_cascade(label="Submenu", menu=submenu)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)
print_menu_items(menubar)
root.mainloop()
输出信息如下:
Cascade Menu: File
Menu Item: New
Menu Item: Open
Menu Item: Save
Menu Item: Save as...
Menu Item: Close
Cascade Menu: Submenu
Menu Item: Submenu 1
Menu Item: Submenu 2