首页 > 编程语言 >python遍历tk菜单项的名字

python遍历tk菜单项的名字

时间:2023-07-10 19:33:55浏览次数:35  
标签:python Menu filemenu label add tk menu 菜单项

直接上代码:

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

标签:python,Menu,filemenu,label,add,tk,menu,菜单项
From: https://www.cnblogs.com/huzhongqiang/p/17542089.html

相关文章

  • python2.2
     制表位8个字节 1个字2个字节1个字节8位1个bit是1个2进制位,1个byte即1B,是1个字节。1B=8b   ord()将字符转换为Unicode编码,chr()将Unicode编码转换为字符eval()忽略‘’和“”#eval()运行时会忽略‘’和“”print('字符串索引与切片')print(eval('字符串索引与切片......
  • python3使用pip安装wordcloud报错error: Microsoft Visual C++ 14.0 or greater is re
    背景:使用的是Anaconda集成环境,python版本是:3.10,安装wordcloud包,使用的命令是:pipinstallwordcloud,出现报错:error:MicrosoftVisualC++14.0orgreaterisrequired.Getitwith"MicrosoftC++BuildTools":https://visualstudio.microsoft.com/visual-cpp-build-tools/......
  • aardio桌面软件开发 简单,打包后文件小,支持 .net python 和 众多插件
    aardio编程语言-官网 aardio ......
  • python的安装
    一、python的下载和安装官网:https://www.python.org/我的电脑是windows,点击windows.根据自己的电脑安装不同的版本有不同的版本,不建议安装最新版推荐3.8.6和3.8.8根据自己的电脑安装32位或64位,64位可安装32位的软件。下载好之后,双击安装包勾选AddPython3.8toPATH......
  • python图片去重复算法
    importosfromimagededup.methodsimportPHash#pipinstallimagededupphasher=PHash()defprocess_file(img_path):#生成图像目录中所有图像的二值hash编码encodings=phasher.encode_images(image_dir=img_path)duplicates=phasher.find_duplica......
  • Python 实现 ThreadLocal
    importthreadingfromthreadingimportget_identimporttimeclassContext:def__init__(self):object.__setattr__(self,'__global_context__',dict())object.__setattr__(self,'__get_ident__',get_ident)def......
  • python 执行超时装饰器
    代码:importsignalclassTimeoutError(Exception):passdeftimeout(seconds=10,error_message='Timeout'):defdecorator(func):defwrapper(*args,**kwargs):def_handle_timeout(signum,frame):raiseTi......
  • Python的日志
    Python的日志,看上去啰啰嗦嗦的。请大神写了个通俗易懂简单方便通用的日志:importlogging#配置日志记录级别和输出方式logging.basicConfig(level=logging.DEBUG,filename='mylog.log',filemode='w',format='%(asctime)s-%(levelname)s-%(message)s')deflog_exceptio......
  • 西门子免授权CNC数控系统数据采集c#、C、python都支持,可支持再各种操作系统上运行,无须
    西门子数控系统数据采集方案(无需OPC授权方案)西门子数控系统4.5版本及以上集成了工业协议OPCUA,用户可通过OPCUA协议进行设备的数据采集,但是需要西门子授权,而且仅支持828d,828dsl,840dsl本协议可通过原生TCP数据包和数控系统进行通讯,支持各种类型开发语言和操作平台。  西门......
  • python过滤器filter()及lambda表达式的应用
    一、filter()方法介绍:filter()是Python内置的一个函数,用于根据指定的条件对可迭代对象进行筛选,返回符合条件的元素。filter()函数的语法如下:filter(function,iterable)其中function是一个函数或可调用对象,表示用于判断每个元素是否符合条件的函数。iterable则是一个可......