DMarlon Studio

Lección 3 · 3 de 20

Botones y su acción · tkinter

Un botón de tkinter con command: cada clic llama a una función que actualiza un contador. También, botones desactivados con state.

tkinter · Botones y su acción en DMarlon Studio: el código del ejemplo y la ventana que abre al ejecutarlo

count = 5 guarda el número de clics. Empieza en 5 para que la etiqueta enseñe ya un valor al abrir la ventana: text=f"Clicks: {count}".

Un botón (ttk.Button) lleva su texto y, en `command`, la función que se ejecuta al pulsarlo. Se pasa el nombre de la función, add, sin paréntesis: con add() se llamaría una sola vez, al crear el botón, y no con cada clic.

add() suma uno y cambia el texto con `label.config(text=...)`: config (o configure) modifica cualquier opción de un componente ya creado. global count hace falta porque la función cambia una variable de fuera. reset() la pone a cero.

Los dos botones van dentro de un ttk.Frame y se colocan con pack(side="left"), uno al lado del otro (los marcos y pack se ven a fondo más adelante). El último lleva `state="disabled"`: se ve en gris y no responde.

En DMarlon Studio es el Botón de la paleta. En el inspector se le asigna el evento *Al pulsar* y el estudio escribe el método al que apunta command; usted solo escribe lo que hace.

Código · main.py

import tkinter as tkfrom tkinter import ttkroot = tk.Tk()root.title("Click counter")root.geometry("400x250")count = 5  # starts at 5, so the label already shows a numberlabel = ttk.Label(root, text=f"Clicks: {count}", font=("Helvetica", 24))label.pack(pady=(34, 20))def add():    global count    count += 1    label.config(text=f"Clicks: {count}")def reset():    global count    count = 0    label.config(text=f"Clicks: {count}")# A frame keeps the two buttons side by side.row = ttk.Frame(root)row.pack()ttk.Button(row, text="Add one", command=add).pack(side="left", padx=6)ttk.Button(row, text="Reset", command=reset).pack(side="left", padx=6)# A disabled button: visible, but it cannot be clicked.ttk.Button(root, text="Not available", state="disabled").pack(pady=18)root.mainloop()

Para recordar

  • command recibe la función, sin paréntesis.
  • config(text=...) cambia un componente ya creado.
  • state="disabled" desactiva un botón; "normal" lo vuelve a activar.
  • global permite cambiar una variable de fuera desde una función.

Ejercicio

Añada un botón «Subtract one» que reste uno al contador sin dejarlo bajar de cero.