DMarlon Studio

Lección 11 · 11 de 20

Deslizadores · tkinter

Elija números arrastrando con Scale de tkinter: horizontal y vertical, con título, rango, paso y valor visible, y también ttk.Scale.

tkinter · Deslizadores en DMarlon Studio: el código del ejemplo y la ventana que abre al ejecutarlo

Un deslizador (Scale) elige un número entre dos límites arrastrando el cursor. tk.Scale muestra su título (label) y, encima del cursor, el valor actual.

El vertical va de `from_=30`, arriba, a `to=10`, abajo (from_ lleva guion bajo porque from es una palabra reservada de Python). `resolution=0.5` es el paso: el valor avanza de medio en medio grado, y length es el largo en píxeles. Se coloca primero, con pack(side="right"), para que ocupe el borde derecho.

Cada deslizador está unido a una variable con variable=: IntVar(value=70) y DoubleVar(value=21.5) deciden dónde empieza el cursor. Como con StringVar, volume.get() lee el valor y set() mueve el cursor.

`ttk.Scale` tiene el aspecto del sistema, pero no muestra texto y su valor siempre es decimal. Por eso una etiqueta enseña el zoom con un decimal (:.1f); su command recibe el valor nuevo con cada movimiento. Los otros dos avisan con trace_add.

En DMarlon Studio es el Deslizador de la paleta: el título, los límites, el paso, el valor, la orientación y si se muestra el valor se cambian en el inspector, y el estudio lo escribe como tk.Scale unido a una DoubleVar.

Código · main.py

import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Sliders")root.geometry("520x320")# tk.Scale vertical: from_ at the top, to at the bottom.temp = tk.DoubleVar(value=21.5)tk.Scale(root, label="°C", from_=30, to=10, resolution=0.5, orient="vertical",         variable=temp, length=250).pack(side="right", padx=28, pady=16)# tk.Scale horizontal: it shows its title and its current value.volume = tk.IntVar(value=70)tk.Scale(root, label="Volume", from_=0, to=100, orient="horizontal",         variable=volume, length=320).pack(anchor="w", padx=24, pady=(18, 12))# ttk.Scale: the system look, without text; a label shows the value.zoom = tk.DoubleVar(value=1.5)ttk.Label(root, text="Zoom").pack(anchor="w", padx=24)ttk.Scale(root, from_=0.5, to=3, variable=zoom, length=320,          command=lambda value: show()).pack(anchor="w", padx=24)summary = ttk.Label(root, font=("Helvetica", 14), foreground="#1d4ed8")summary.pack(anchor="w", padx=24, pady=18)def show(*args):    summary.config(text=f"Volume {volume.get()} · {temp.get()} °C"                        f" · zoom {zoom.get():.1f}x")volume.trace_add("write", show)temp.trace_add("write", show)show()root.mainloop()

Para recordar

  • from_ y to son los límites; resolution, el paso.
  • orient es "horizontal" o "vertical".
  • La variable unida decide dónde empieza el cursor.
  • ttk.Scale no muestra el valor: enséñelo con una etiqueta.

Ejercicio

Añada un deslizador «Brightness» de 0 a 10 con paso 2 y muestre su valor en el resumen.