Saltar a contenido

Widget Menu (Menú)

En esta lección vamos a aprender a crear un menú superior de toda la vida con varias secciones.

El primer widget menú que creamos hace referencia a la barra de menú, de ahí que se le suele llamar menubar:

from tkinter import *

root = Tk()

menubar = Menu(root)
root.config(menu=menubar)  # Lo asignamos a la base

root.mainloop()

Una vez creada la barra podemos comenzar a añadir submenús y comandos. Empecemos con los submenús:

filemenu = Menu(menubar)
editmenu = Menu(menubar)
helpmenu = Menu(menubar)

Ya tenemos los submenús, pero todavía nos falta añadirlos a la barra de menú:

menubar.add_cascade(label="Archivo", menu=filemenu)
menubar.add_cascade(label="Editar", menu=editmenu)
menubar.add_cascade(label="Ayuda", menu=helpmenu)

Bien ya tenemos nuestra barra con los 3 submenús funcionando bien, pero ocurre algo raro, nos aparece una especie de elemento por defecto. Podemos hacer que desaparezca si indicamos el parámetro tearoff=0:

filemenu = Menu(menubar, tearoff=0)
editmenu = Menu(menubar, tearoff=0)
helpmenu = Menu(menubar, tearoff=0)

Ahora sí que lo tenemos bien, ¿pero está demasiado vacío no? Vamos a añadir comandos de ejemplo en nuestros submenús:

filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Nuevo")
filemenu.add_command(label="Abrir")
filemenu.add_command(label="Guardar")
filemenu.add_command(label="Cerrar")

También podemos agregar un separador y un comando de salir con root.quit:

filemenu.add_separator()
filemenu.add_command(label="Salir", command=root.quit)

Tened en cuenta que debéis crear una funcionalidad para cada comando, pero como sólo estamos haciendo una prueba vamos a crear algunas opciones más de ejemplo:

editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cortar")
editmenu.add_command(label="Copiar")
editmenu.add_command(label="Pegar")

helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Ayuda")
helpmenu.add_separator()
helpmenu.add_command(label="Acerca de...")

Código final:

from tkinter import *

# Configuración de la raíz
root = Tk()

menubar = Menu(root)
root.config(menu=menubar)

filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Nuevo")
filemenu.add_command(label="Abrir")
filemenu.add_command(label="Guardar")
filemenu.add_command(label="Cerrar")
filemenu.add_separator()
filemenu.add_command(label="Salir", command=root.quit)

editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cortar")
editmenu.add_command(label="Copiar")
editmenu.add_command(label="Pegar")

helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Ayuda")
helpmenu.add_separator()
helpmenu.add_command(label="Acerca de...")

menubar.add_cascade(label="Archivo", menu=filemenu)
menubar.add_cascade(label="Editar", menu=editmenu)
menubar.add_cascade(label="Ayuda", menu=helpmenu)

# Finalmente bucle de la aplicación
root.mainloop()

Última edición: 4 de Octubre de 2018