¿Actualizar la etiqueta del elemento de la barra de menú tkinter?

¿Es posible cambiar la etiqueta de un elemento en un menú con tkinter?

En el siguiente ejemplo, me gustaría cambiarlo de “Un elemento de ejemplo” (en el menú “Archivo”) a un valor diferente.

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() 

Encontré la solución yo mismo en las páginas de manual de Tcl :

Utilice el método entryconfigure() como tal, que cambia el valor después de hacer clic:

El primer parámetro 1 debe ser el índice del elemento que desea cambiar, comenzando desde 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() 

No sé si eso solía ser diferente en 2.7, pero ya no funciona en 3.4.

En Python 3.4 debes comenzar a contar las entradas con 0 y usar entryconfig .

 menu.entryconfig(0, label = "Clicked!") 

http://effbot.org/tkinterbook/menu.htm

Mira este ejemplo de menú dynamic. La característica principal aquí es que no necesita preocuparse por el número de serie (índice) de su elemento de menú. No se necesita un índice (lugar) de su menú para rastrear. El elemento del menú puede ser el primero o el último, no importa. Por lo tanto, puede agregar nuevos menús sin el seguimiento de índice (posición) de sus menús.

El código está en 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() 

OK, pero ¿cómo puede cambiar la entrada en “menu_bar.add_cascade (label =” File “, menu = file_menu)”?

¡Este es el problema que tengo! Quiero que el menú “Archivo” cambie a otro idioma, por ejemplo! (por ejemplo, de alemán a japonés)