Tkinter Designer

← Guías de tkinter

¿Cómo agrupo widgets con un LabelFrame en tkinter?

Un LabelFrame es un contenedor con borde y título. Lo que hace tropezar no es el widget sino el parentesco: todo lo que deba quedar dentro tiene que crearse con el LabelFrame como padre, no con la ventana.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

box = ttk.LabelFrame(root, text="Envío")
box.pack(fill="x", padx=10, pady=10)

# el padre es box, no root — ahí está todo el truco
ttk.Radiobutton(box, text="Estándar", value="std").pack(anchor="w")
ttk.Radiobutton(box, text="Exprés", value="exp").pack(anchor="w")

root.mainloop()

Por qué los widgets quedan fuera del recuadro

Pasar root como padre pone el widget en la ventana y deja vacío el LabelFrame, que entonces se dibuja como un título fino sin nada debajo. El argumento del padre es lo que decide la contención: la posición en pantalla no tiene nada que ver, así que un widget puede parecer que está dentro y pertenecer a la ventana.

Un LabelFrame sin hijos se encoge casi hasta desaparecer, así que un recuadro más pequeño de lo esperado suele ser este error y no un problema de tamaño.

El título y dónde se coloca

text pone el título, y se puede cambiar después como cualquier otra opción. En el widget con tema, labelanchor lo mueve por el borde: por defecto va arriba a la izquierda, y valores como n o ne lo desplazan por el borde superior.

box = ttk.LabelFrame(root, text="Envío", labelanchor="n")
box.configure(text="Entrega")

Clásico o con tema

tk.LabelFrame acepta las opciones clásicas, así que puede tener color de fondo y su propio relief. ttk.LabelFrame sigue el tema activo, que es lo que quieres con ttkbootstrap, pero va a ignorar un bg= que le pongas directamente.

Cuándo es mejor un Frame normal

Usa un Frame cuando la agrupación sea solo de disposición y el usuario no tenga por qué verla: casi todas las ventanas están llenas de frames invisibles que sostienen filas. Usa un LabelFrame cuando el grupo sea una categoría real que valga la pena nombrar en pantalla.

Hacerlo sin buscarlo

Coloca un Labelframe en el lienzo y arrastra widgets dentro; el contorno se resalta cuando el widget va a quedar capturado, y la exportación escribe cada hijo con el frame como padre. El título es un campo del inspector.

Diseña la ventana visualmente y ve el código Python generado sobre la marcha.

Abrir el diseñador de tkinter →

Preguntas relacionadas