Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[tkinter] ¿Como habilitar/deshabilitar los submenus del widget Menu?
#1
Hola de nuevo!  Smile

Estoy creando una pequeña aplicacion y probando el widget Menu de tkinter. Uso python 3.4. Cuando uso el widget Button es facil habilitar o deshabiltar el boton. Lo normal es instanciar el Button y hacer por ejemplo:

Código:
boton = Button(ventana, text = 'Boton 1', command = funcion)
boton.place(x = 10, y = 10)

# boton Deshabilitado
boton.config(state = 'disabled')

# boton Habilitado
boton.config(state = 'normal')

Pero lo que no logro resolver es hacer esto mismo con los submenus. Lo puedo deshabilitar dentro de su constructor. Pero claro, al no instanciar, no se como activarlo de nuevo dicho submenu.

Ejemplo basico:
Código:
from tkinter import Tk, Menu



# FUNCIONES --------------------------------------------------------------------
def abrir():
   pass

def guardar():
   pass


# Creacion de la ventana principal ---------------------------------------------
ventana = Tk()
ventana.title('Menu')
ventana.resizable(0, 0)
ventana.geometry('600x400')


# Creacion de la barra de Menu
menubar = Menu(ventana)
ventana.config(menu = menubar)

# Creacion de menu
archivoMenu = Menu(menubar, tearoff = 0)

# Creacion submenus
menubar.add_cascade(label = 'Archivo', menu = archivoMenu)


archivoMenu.add_command(label = 'Abrir', command = abrir)
archivoMenu.add_command(label = 'Guardar', state = 'disabled', command = guardar)

archivoMenu.add_separator()
archivoMenu.add_command(label = 'Salir', command = ventana.quit)


ventana.mainloop()

Como se puede ver en esta linea:

archivoMenu.add_command(label = 'Guardar', state = 'disabled', command = guardar)

El parametro state es igual a 'disabled'. Por lo cual no se puede acceder. Y solo deseo que se acceda mediante alguna condicion creada.
¿Como puedo cambiar el state de los submenus a voluntad?

Muchas gracias Smile
Responder
#2
Hola. El método entryconfig() te permite configurar las opciones de cualquier submenú indicando su nombre o índice. Por ejemplo, para rehabilitar el submenú Guardar:

  1. archivoMenu.entryconfig(index="Guardar", state="normal")


O bien indicando su posición si el texto varía en tiempo de ejecución:

  1. archivoMenu.entryconfig(index=1, state="normal")


Saludos!
Responder
#3
Pues muchas gracias. Funciona perfectamente  Smile
En todo caso de momento he probado la primera opcion que es la que necesitaba. La otra, en tiempo de ejecucion, aun tengo de ver que usos podria tener. Entiendo que seria algo confuso que cambiara el texto de un submenu de forma dinamica. 

Saludos!
Responder
#4
De nada Wink El único caso que se me ocurre es en aplicaciones que soporten múltiples idiomas.

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)