Lección 18 · 18 de 20
Separador, Message y Sizegrip · tkinter
Tres componentes pequeños de tkinter: ttk.Separator para dividir, tk.Message para texto que se ajusta solo y ttk.Sizegrip para redimensionar.

La barra de estado se coloca primero, con pack(side="bottom", fill="x"), para que quede siempre abajo: un marco con el texto «Ready» a la izquierda y, a la derecha, un `ttk.Sizegrip`, el asa de la esquina con la que se arrastra el tamaño de la ventana.
Un `ttk.Separator` es una línea fina que divide. Con orient="horizontal" y fill="x" cruza todo el ancho: uno separa la barra de estado del resto y otro va debajo del texto.
`tk.Message` se parece a una etiqueta, pero parte su texto en líneas por sí mismo. Con width=440 (en píxeles) las líneas llegan hasta ese ancho; sin width, usa aspect, la proporción entre el ancho y el alto (150 por defecto).
Con orient="vertical" y fill="y", el separador divide una fila, como entre «Left», «Middle» y «Right». En el bucle, if i: lo pone antes de cada palabra salvo la primera (i vale 0 en la primera vuelta).
Ninguno de los tres está en la paleta de DMarlon Studio; se pueden añadir en la pestaña Código. Para textos largos, la Etiqueta del estudio ya tiene *Ajuste de línea*.
Código · main.py
import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Separator, Message and Sizegrip")root.geometry("480x260")# Status bar at the bottom, with a Sizegrip in the right-hand corner.status = ttk.Frame(root)status.pack(side="bottom", fill="x")ttk.Label(status, text="Ready").pack(side="left", padx=8, pady=2)ttk.Sizegrip(status).pack(side="right", anchor="se")ttk.Separator(root, orient="horizontal").pack(side="bottom", fill="x")ttk.Label(root, text="About Message", font=("Helvetica", 16, "bold")).pack(anchor="w", padx=16, pady=(16, 4))# tk.Message breaks its text into lines by itself; width is in pixels.tk.Message(root, width=440, text="A Message is like a label that wraps its " "own text. Here it uses a width of 440 pixels, so the lines break " "near the edge of the window.").pack(anchor="w", padx=12)# A horizontal Separator: a thin line between two parts.ttk.Separator(root, orient="horizontal").pack(fill="x", padx=16, pady=12)# A vertical Separator between labels in a row.row = ttk.Frame(root)row.pack(anchor="w", padx=16)for i, word in enumerate(("Left", "Middle", "Right")): if i: ttk.Separator(row, orient="vertical").pack(side="left", fill="y", padx=14) ttk.Label(row, text=word, font=("Helvetica", 14)).pack(side="left", pady=4)root.mainloop()Para recordar
ttk.Separatordibuja una línea horizontal o vertical.tk.Messageajusta su texto solo, conwidtho conaspect.ttk.Sizegripes el asa para cambiar el tamaño de la ventana.- Lo que va con
side="bottom"se coloca antes que el resto.
Ejercicio
Cambie width=440 por aspect=300 en el Message y compare cómo reparte el texto; luego pruebe con aspect=100.