DMarlon Studio

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.

tkinter · Separador, Message y Sizegrip en DMarlon Studio: el código del ejemplo y la ventana que abre al ejecutarlo

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.Separator dibuja una línea horizontal o vertical.
  • tk.Message ajusta su texto solo, con width o con aspect.
  • ttk.Sizegrip es 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.