Lección 7 · 7 de 20
Pestañas con Notebook · tkinter
Organice una ventana de tkinter en pestañas con ttk.Notebook: páginas, una pestaña desactivada, la pestaña inicial y el aviso de cambio.

ttk.Notebook es un contenedor con pestañas que enseña una página cada vez. Cada página es un componente —normalmente un ttk.Frame— creado con el cuaderno como padre y añadido con add(página, text="General").
La primera página es un marco con su propio grid: nombre, idioma y una casilla, con los valores puestos desde el código (StringVar, set("English") y BooleanVar). La segunda demuestra que una página puede ser cualquier componente, aquí una sola etiqueta con padding.
state="disabled" deja una pestaña gris que no se puede abrir, útil para opciones que todavía no aplican. select(general) elige la página visible al empezar; también acepta su número (select(0)).
Al cambiar de pestaña, el cuaderno lanza el evento virtual <<NotebookTabChanged>>. La etiqueta de abajo lo aprovecha: index("current") es el número de la pestaña visible, index("end") el total y tab("current", "text") su texto.
En DMarlon Studio es el Control de páginas de la paleta: añade las páginas en el inspector, arrastra componentes a cada una y el estudio genera el ttk.Notebook con un marco por página.
Código · main.py
import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Settings")root.geometry("460x300")name, reopen = tk.StringVar(value="Ana López"), tk.BooleanVar(value=True)# A Notebook holds pages; each page is a Frame added with a tab text.book = ttk.Notebook(root)book.pack(fill="both", expand=True, padx=10, pady=(10, 4))general = ttk.Frame(book, padding=16)ttk.Label(general, text="Name:").grid(row=0, column=0, sticky="w", pady=4)ttk.Entry(general, width=28, textvariable=name).grid(row=0, column=1)ttk.Label(general, text="Language:").grid(row=1, column=0, sticky="w", pady=4)language = ttk.Combobox(general, width=26, values=["English", "Spanish"], state="readonly")language.grid(row=1, column=1)language.set("English")ttk.Checkbutton(general, text="Open the last project at start", variable=reopen).grid(row=2, column=1, sticky="w", pady=8)book.add(general, text="General")book.add(ttk.Label(book, text="Theme and font size go here.", padding=16), text="Appearance")book.add(ttk.Frame(book), text="Advanced", state="disabled") # greyed out# <<NotebookTabChanged>> fires when another tab is shown.status = ttk.Label(root)status.pack(anchor="w", padx=14, pady=(0, 8))book.bind("<<NotebookTabChanged>>", lambda e: status.config( text=f"Tab {book.index('current') + 1} of {book.index('end')}: {book.tab('current', 'text')}"))book.select(general) # the page shown at startroot.mainloop()Para recordar
add(página, text=...)añade una pestaña.select()elige la pestaña visible.state="disabled"desactiva una pestaña.<<NotebookTabChanged>>avisa del cambio.
Ejercicio
Cambie la pestaña «Appearance» por un marco con dos opciones (Light y Dark) y haga que la ventana se abra en ella.