Tutorial de Tkinter - Menubar

Jinku Hu 15 febrero 2024
  1. Menús básicos de Tkinter
  2. Comando Menubar de Tkinter
Tutorial de Tkinter - Menubar

Uno de los elementos más comunes en la interfaz gráfica de usuario es la barra de menú. Normalmente una barra de menú se encuentra debajo de la barra de título para mostrar la serie de menús. Después de hacer clic en uno de los menús de nivel superior, se ampliará un submenú para mostrar más elementos de menú relevantes. Un submenú normalmente está ligado a un comando específico como open, close, save o quit.

Menús básicos de Tkinter

Crearemos nuestro primer ejemplo de menú que tiene el menú File como en la mayoría de los editores. Sólo incluimos los submenús Open, Save y Quit para simplificar.

import tkinter as tk

app = tk.Tk()
app.geometry("300x200")
app.title("Basic Menu Bar")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()

Menús básicos de Tkinter

menubar = tk.Menu(app)

El parámetro dado del Menu es el widget padre del menú creado. La línea de código de arriba significa que el widget de menú menubar será el nivel superior del marco app.

filemenu = tk.Menu(menubar)

De forma similar, filemenu es el menú del widget menubar, o sub-menú del marco app.

filemenu.add_command(label="Open")

add_command añade los comandos al menú filemenu. label es el texto que se muestra en el sub-menú.

menubar.add_cascade(label="File", menu=filemenu)

El filemenu se añade al menubar con el comando add_cascade. File es la etiqueta del menú que se muestra en el nivel superior del cuadro app.

app.config(menu=menubar)

Aunque menubar se crea para ser un widget hijo de app, como explicamos anteriormente, todavía tienes que configurarlo para que sea el menu de app. De lo contrario, no se mostrará ninguna barra de menú en el GUI.

No responde en absoluto si pulsa las opciones como Open o Save en el submenú de File porque no hay ningún comando adjunto a ellas todavía. Haremos que el comando sea funcional en la próxima sesión.

Comando Menubar de Tkinter

import tkinter as tk
from tkinter import filedialog


def onOpen():
    print(
        filedialog.askopenfilename(
            initialdir="/",
            title="Open file",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )


def onSave():
    print(
        filedialog.asksaveasfilename(
            initialdir="/",
            title="Save as",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )


app = tk.Tk()
app.geometry("300x200")
app.title("Menu Bar Command")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()
filemenu = tk.Menu(menubar, tearoff=0)

La opción tearoff está establecida en 1 por defecto y separaría los menús de la ventana principal para crear un menú flotante si se hace clic en las líneas punteadas de la parte superior. Aquí se establece en 0 para desactivar esta característica flotante.

filemenu.add_command(label="Open", command=onOpen)

La función onOpen está ligada al menú Open, y será llamada cuando se haga clic en Open.

def onOpen():
    print(
        filedialog.askopenfilename(
            initialdir="/",
            title="Open file",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )

Esta función muestra el diálogo abierto y devuelve el nombre de fichero seleccionado. En nuestro ejemplo no abrimos realmente el fichero sino que imprimimos su nombre de fichero.

tkfiledialog tiene tres funciones,

Función Parámetros Descripción
.askopenfilename Directorio, Título, Extensión Para abrir el archivo: Diálogo que solicita la selección de un archivo existente.
.asksaveasfilename Directorio, Título, Extensión Para guardar el archivo: Diálogo que solicita la creación o el reemplazo de un archivo.
.askdirectory Ninguno Para abrir el directorio
filemenu.add_command(label="Exit", command=app.quit)

Tkinter tiene una función interna quit que cierra la GUI raíz. Podríamos simplemente vincular esta función existente a Exit en lugar de crear nuestra propia función de Exit.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook