是否可以使用tkinter更改菜单中项目的标签?
在以下示例中,我想将其从“示例项目”(在“文件”菜单中)更改为其他值。
from tkinter import *
root = Tk()
menu_bar = Menu(root)
file_menu = Menu(menu_bar, tearoff=False)
file_menu.add_command(label="An example item", command=lambda: print('clicked!'))
menu_bar.add_cascade(label="File", menu=file_menu)
root.config(menu=menu_bar)
root.mainloop()
答案 0 :(得分:10)
我自己在Tcl manpages:
中找到了解决方案使用像这样的entryconfigure()
方法,它会在点击后更改值:
第一个参数1
必须是您要更改的项目的索引,从1开始。
from tkinter import *
root = Tk()
menu_bar = Menu(root)
def clicked(menu):
menu.entryconfigure(1, label="Clicked!")
file_menu = Menu(menu_bar, tearoff=False)
file_menu.add_command(label="An example item", command=lambda: clicked(file_menu))
menu_bar.add_cascade(label="File", menu=file_menu)
root.config(menu=menu_bar)
root.mainloop()
答案 1 :(得分:2)
我不知道2.7上是否有所不同,但它不再适用于3.4。
在python 3.4上,您应该开始使用0计数条目并使用dependencies:
pre:
- pip install -r requirements.txt
。
entryconfig
答案 2 :(得分:0)
检查此动态菜单示例。这里的主要功能是您不需要关心菜单项的序列号(索引)。无需跟踪菜单的索引(位置)。菜单项可能是第一个或最后一个,没关系。因此,您可以添加新菜单,而无需菜单的索引跟踪(位置)。
代码在Python 3.6上。
# Using lambda keyword and refresh function to create a dynamic menu.
import tkinter as tk
def show(x):
""" Show your choice """
global label
new_label = 'Choice is: ' + x
menubar.entryconfigure(label, label=new_label) # change menu text
label = new_label # update menu label to find it next time
choice.set(x)
def refresh():
""" Refresh menu contents """
global label, l
if l[0] == 'one':
l = ['four', 'five', 'six', 'seven']
else:
l = ['one', 'two', 'three']
choice.set('')
menu.delete(0, 'end') # delete previous contents of the menu
menubar.entryconfigure(label, label=const_str) # change menu text
label = const_str # update menu label to find it next time
for i in l:
menu.add_command(label=i, command=lambda x=i: show(x))
root = tk.Tk()
# Set some variables
choice = tk.StringVar()
const_str = 'Choice'
label = const_str
l = ['dummy']
# Create some widgets
menubar = tk.Menu(root)
root.configure(menu=menubar)
menu = tk.Menu(menubar, tearoff=False)
menubar.add_cascade(label=label, menu=menu)
b = tk.Button(root, text='Refresh menu', command=refresh)
b.pack()
b.invoke()
tk.Label(root, textvariable=choice).pack()
root.mainloop()
答案 3 :(得分:-1)
好的,但是如何更改" menu_bar.add_cascade中的条目(label =" File",menu = file_menu)"?
这是我的问题!我想要"文件"菜单chages到另一种语言,例如! (例如从德国人到日本人)