【问题标题】:How to check if Menu item exists in Python Tkinter如何检查 Python Tkinter 中是否存在菜单项
【发布时间】:2021-01-17 15:48:02
【问题描述】:

在 python tkinter 上,我有以下代码用于创建只有 2 个菜单项的 Menu

my_menu = Menu(root, tearoff=False)
my_menu.add_command(label="Show details", command=whatever)
my_menu.add_command(label="Delete me", command=something)

现在我想添加一个if 语句来检查菜单项:删除我是否存在于菜单中。如果存在,则删除该菜单项(如以下代码sn-p,仅用于演示)

if... :                                  #if statement to check if menu item "Delete me" exists
    my_menu.delete("Delete me")          #delete the menu item
else:
    pass

【问题讨论】:

  • 您可以访问Python Tkinter menu获取参考资料。
  • 已经看到了,但是我找不到我需要的。

标签: python python-3.x tkinter tkinter-menu


【解决方案1】:

有很多方法可以做到这一点,但最动态的方法是获取最后一项的索引,然后循环到最后一个索引号,然后进行检查:

from tkinter import *

root = Tk()

def whatever():
    for i in range(my_menu.index('end')+1):
        if my_menu.entrycget(i,'label') == 'Delete me': # Delete if any has 'Delete me' as its label
            my_menu.delete("Delete me")

my_menu = Menu(root, tearoff=False)
my_menu.add_command(label='Show details', command=whatever)
my_menu.add_command(label='Delete me')
root.config(menu=my_menu)

root.mainloop()

【讨论】:

  • 解决方案 3 是我需要的,但这部分解决了我的问题。查找存在多少菜单项会更有效,而不是仅仅放置一个随机数(例如 10)。因为一旦超出索引,就会产生错误。
【解决方案2】:
def menu_has_item(menu, label):
    try:
        menu.index(label)
        return True
    except TclError:
        return False


root = Tk()

details = "Show details"
delete = "Delete me"

my_menu = Menu(root, tearoff=False)
my_menu.add_command(label=details, command=whatever)
my_menu.add_command(label=delete, command=whatever)

root.config(menu=my_menu)

print(menu_has_item(my_menu, 'Not in'))
print(menu_has_item(my_menu, details))

这将返回以下内容:

False
True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多