Tkinter Designer

← Guías de tkinter

¿Cómo agrego una línea separadora en tkinter?

Usa ttk.Separator con un orient, y dale un largo al colocarlo. Por sí solo un separador no ocupa espacio, y por eso el primer intento de siempre parece no hacer absolutamente nada.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

tk.Label(root, text="Cuenta").pack()
ttk.Separator(root, orient="horizontal").pack(fill="x", pady=8)
tk.Label(root, text="Pago").pack()

root.mainloop()

Por qué el tuyo es invisible

Un separador no pide espacio propio: empaquetado sin fill, uno horizontal mide un píxel por un píxel, un punto que no vas a encontrar nunca en una ventana de 300. Con fill="x" se estira a lo ancho de su contenedor y aparece de inmediato, de un píxel de alto y tan ancho como el espacio permita.

Lo mismo vale para uno vertical, que necesita fill="y" para tener altura. En un grid, sticky="ew" y sticky="ns" hacen el mismo trabajo, y una línea horizontal casi siempre quiere columnspan para cruzar todo el diseño y no una sola columna.

ttk.Separator(root, orient="horizontal").pack(fill="x")
ttk.Separator(root, orient="vertical").pack(side="left", fill="y")

# en un grid
ttk.Separator(root, orient="horizontal").grid(row=2, columnspan=3, sticky="ew")

Darle aire

Una división funciona tanto por el espacio a su alrededor como por la línea en sí, así que deja margen en vez de pegarla a los widgets de los lados. Con pady en un separador horizontal y padx en uno vertical suele bastar para que la ventana se lea como secciones y no como una lista.

Cuándo el separador no es la respuesta

Si los widgets de los dos lados van juntos y la línea está para decirlo, un LabelFrame declara la agrupación abiertamente y además le pone nombre. Deja el separador para cuando quieras un corte sin ningún nombre asociado.

Hacerlo sin buscarlo

Arrastra un Separator y dale un ancho en el lienzo: como el diseñador coloca los widgets de forma absoluta, ya tiene largo, así que el problema del separador invisible no puede pasar. La orientación es un desplegable 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