Lección 16 · 16 de 20
Colocar con place · tkinter
El gestor place de tkinter: posiciones absolutas en píxeles, relativas al tamaño de la ventana y con anchor. Es el que usa DMarlon Studio.

`place` pone cada componente en una posición exacta. Con `x` e `y` se mide en píxeles desde la esquina superior izquierda, y con `width` y `height` se fija también su tamaño, como en el botón y el campo de la izquierda.
Las opciones relativas van de 0.0 a 1.0: relx=0.45 es el 45 % del ancho de la ventana. El panel azul (tk.Frame) usa además relwidth=0.5 y relheight=0.55, así que crece si se agranda la ventana.
`anchor` dice qué punto del componente cae en esa posición. Con anchor="center", relx=0.5, rely=0.5 deja la etiqueta justo en medio del panel, y la amarilla queda centrada a lo ancho. Con "se" (sureste), lo que se coloca es la esquina inferior derecha.
Las dos formas se suman: el botón OK usa relx=1.0, rely=1.0 (la esquina inferior derecha de la ventana) y x=-16, y=-16 para separarse 16 píxeles hacia dentro. Seguirá en la esquina aunque cambie el tamaño.
Es el gestor que usa DMarlon Studio: cada componente que se suelta en el formulario se escribe con place(x=..., y=..., width=..., height=...), con la posición y el tamaño que tiene en el diseñador.
Código · main.py
import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Layout with place")root.geometry("540x330")# Absolute: x and y in pixels from the top-left corner of the window.ttk.Label(root, text="x=20, y=20").place(x=20, y=20)ttk.Button(root, text="x=20, y=50, width=180").place(x=20, y=50, width=180)ttk.Entry(root).place(x=20, y=94, width=180, height=28)# Relative: fractions of the window, from 0.0 to 1.0.panel = tk.Frame(root, bg="#dbeafe")panel.place(relx=0.45, rely=0.06, relwidth=0.5, relheight=0.55)tk.Label(panel, text="relx=0.45, rely=0.06\nrelwidth=0.5, relheight=0.55", bg="#dbeafe").place(relx=0.5, rely=0.5, anchor="center")# anchor="center": the point (relx, rely) is the middle of the widget.tk.Label(root, text="relx=0.5, rely=0.75, anchor=center", bg="#fef08a", padx=6, pady=6).place(relx=0.5, rely=0.75, anchor="center")# Both together: the bottom-right corner, then 16 pixels inwards.ttk.Button(root, text="OK").place(relx=1.0, rely=1.0, x=-16, y=-16, anchor="se")root.mainloop()Para recordar
xeyson píxeles desde la esquina superior izquierda.relx,rely,relwidthyrelheightvan de 0.0 a 1.0.anchorelige qué punto del componente se coloca.- Las posiciones absolutas y relativas se pueden sumar.
Ejercicio
Coloque un botón «Back» en la esquina inferior izquierda, a 16 píxeles de los bordes, con rely=1.0 y anchor="sw".