DMarlon Studio

Lección 7 · 7 de 20

Casillas de verificación · tkinter

Casillas de tkinter (Checkbutton), cada una con su BooleanVar: unas marcadas al empezar y un resumen que cambia con cada clic.

tkinter · Casillas de verificación en DMarlon Studio: el código del ejemplo y la ventana que abre al ejecutarlo

Un Checkbutton es una casilla que se marca y se desmarca. Su estado vive en una variable: aquí, una `BooleanVar`, que vale True si está marcada y False si no.

El diccionario toppings dice qué casillas empiezan marcadas. El bucle crea para cada ingrediente tk.BooleanVar(value=checked) y la casilla con variable=choices[name]. Las variables se guardan en el diccionario choices para leerlas después: si una variable de tkinter se pierde, la casilla se queda sin estado.

command=update se llama con cada clic. update recorre choices, se queda con los nombres cuyo var.get() es True y los une con ", ".join(...); si no hay ninguno, escribe none.

La etiqueta summary se crea antes del bucle para que update pueda usarla, pero se coloca con pack después, debajo de las casillas: lo que decide la posición es el orden de pack, no el de creación.

En DMarlon Studio es la Casilla de la paleta: en el inspector se pone su texto y si empieza *Marcada*. El estudio la une a una IntVar llamada self.<Nombre>_var, que vale 1 si está marcada y 0 si no.

Código · main.py

import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Pizza toppings")root.geometry("400x270")ttk.Label(root, text="Choose your toppings",          font=("Helvetica", 16, "bold")).pack(anchor="w", padx=24, pady=(20, 8))summary = ttk.Label(root, foreground="#1d4ed8")toppings = {"Cheese": True, "Mushrooms": False, "Olives": True,            "Pepperoni": False, "Pineapple": False}choices = {}  # name -> BooleanVardef update():    chosen = [name for name, var in choices.items() if var.get()]    summary.config(text="Selected: " + (", ".join(chosen) or "none"))# One BooleanVar per checkbox: True while it is checked.for name, checked in toppings.items():    choices[name] = tk.BooleanVar(value=checked)    ttk.Checkbutton(root, text=name, variable=choices[name],                    command=update).pack(anchor="w", padx=36, pady=2)summary.pack(anchor="w", padx=24, pady=14)update()root.mainloop()

Para recordar

  • Cada casilla tiene su propia variable (BooleanVar o IntVar).
  • El valor inicial de la variable decide si empieza marcada.
  • command se llama cada vez que se marca o se desmarca.
  • Guarde las variables: si se pierden, la casilla se queda sin estado.

Ejercicio

Añada un precio a cada ingrediente y muestre en el resumen el total de los que estén marcados.