¿Cómo puedo llenar dinámicamente un widget de opción en tkinter dependiendo de una opción de un menú desplegable?

Mi problema es el siguiente: tengo varios archivos y he creado un menú desplegable con los nombres, lo siguiente que necesito es un menú de opciones que se puede cambiar cada vez que se selecciona un nombre de archivo para mostrar algunos datos del archivo específico como Opción. Para que quede claro, mi pregunta es solo sobre cómo hacer que el menú de opciones cambie cuando se selecciona una opción del menú desplegable. Gracias por cualquier ayuda.

El widget OptionMenu no es más que una clase de conveniencia que crea un menú que está asociado con un menú. Puede acceder a este menú a través del atributo "menu" . El único truco es saber qué deben hacer los elementos del menú, que no es más que establecer el valor de la variable asociada.

Aquí hay un ejemplo:

 import Tkinter as tk class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.om_variable = tk.StringVar(self) b1 = tk.Button(self, text="Colors", width=8, command=self.use_colors) b2 = tk.Button(self, text="Sizes", width=8, command=self.use_sizes) self.om = tk.OptionMenu(self, self.om_variable, ()) self.om.configure(width=20) self.use_colors() b1.pack(side="left") b2.pack(side="left") self.om.pack(side="left", fill="x", expand=True) def _reset_option_menu(self, options, index=None): '''reset the values in the option menu if index is given, set the value of the menu to the option at the given index ''' menu = self.om["menu"] menu.delete(0, "end") for string in options: menu.add_command(label=string, command=lambda value=string: self.om_variable.set(value)) if index is not None: self.om_variable.set(options[index]) def use_colors(self): '''Switch the option menu to display colors''' self._reset_option_menu(["red","orange","green","blue"], 0) def use_sizes(self): '''Switch the option menu to display sizes''' self._reset_option_menu(["x-small", "small", "medium", "large"], 0) if __name__ == "__main__": app = SampleApp() app.mainloop() 

Como OptionMenu da una opción de comando, sugeriría mantener la referencia al comando ya dado (si corresponde) y pasarlo a las nuevas opciones de esta manera:

Atención, variables en función de la respuesta anterior.

 def __init__(self, *args, **kwargs): ... self.command=kwargs['command'] ... def _reset_option_menu(options, index=None): ... menu.add_command(label=string, command=lambda:self.command(), value=self.om_variable.set(string)) ... 

Espero que sea de alguna utilidad por cierto, realmente útil la respuesta dada por Bryan Oakley,