El widget Checkbutton() - Tkinter desde cero - Capítulo 16


En este capítulo vamos a ver los Checkbutton(), que son muy parecidos a los Radiobutton(), con la diferencia fundamental de que en lugar de poder seleccionar solo una opción, estos nos permiten seleccionar ninguna, una, o más de una.

Checkbutton() con IntVar

Para crear un Checkbutton(), debemos tener como dije en el capítulo de los Radiobutton() una variable de control de tipo integer.

Código

control = IntVar()

opcion_1 = Checkbutton(root, text="Opción 1", variable=control).pack()

Resultado

El resultado, si lo ejecutamos, por el momento es una sola opción, la cual, por defecto nos aparece desmarcada. Por supuesto, la podemos seleccionar como ves en la imagen.

Checkbutton() en Tkinter

Voy a escribir una función que me devuelva el valor que devuelve el checkbutton, así sabremos como tratarlo para hacer cosas con él.

Código

def seleccion():
    etiqueta = Label(root, text=control.get()).pack()

control = IntVar()

opcion_1 = Checkbutton(root,
                      text="Opción 1",
                      variable=control)
opcion_1.pack()

muestra_seleccion = Button(root, text="Mostrar selección", command=seleccion).pack()

Resultado

El resultado es que nos muestra debajo del botón el valor que envía en cada caso, si la opción está desmarcada, envía el valor 0 y si está marcada el valor 1.

Checkbutton() en Tkinter valor enviado.

Checkbutton() con StringVar

También podemos hacer que cada una de las opciones envíe valores de texto en lugar de tipo string, esto es tan fácil como cambiar el tipo de variable de control.

Código

control = StringVar()

En cada una de las opciones del formulario, es decir, en cada Checkbutton() que crees, puedes poner un valor de tipo string para la opción desmarcada y otro para la opción marcada.

Código

opcion_1 = Checkbutton(root,
                      text="Opción 1",
                      variable=control)
opcion_1.pack()

Resultado

Si lo ejecutas así, vas a poder ver que funciona, pero que la opción sale marcada por defecto si utilizamos un StringVar.

Checkbutton() en Tkinter stringvar.

Podemos alterar este comportamiento, añade la opción deselect() para que la opción no aparezca seleccionada por defecto.
¡Ojo! el pack de las opciones debe ir separado, no lo podemos adjuntar a la creación del Checkbutton().

Código

opcion_1.pack()
opcion_1.deselect()

Resultado

Checkbutton() en Tkinter stringvar deseleccionado.

Y por fin, la gran diferencia entre Checkbutton() y Radiobutton(). Para que se puedan seleccionar varias opciones debemos contar con dos o más variables de control diferentes, depende del número de opciones que tengamos si tenemos tres Checkbutton() diferentes debemos tener tres variables de control diferentes.

Aquí un tienes un ejemplo:

Código

from tkinter import *

root = Tk()
root.title("Ventana principal")
root.geometry("250x200")

def seleccion():
   etiqueta1 = Label(root, text=control1.get()).pack()
   etiqueta2 = Label(root, text=control2.get()).pack()

control1 = StringVar()
control2 = StringVar()

opcion_1 = Checkbutton(root,
                      text="Opción 1",
                      variable=control1,
                      onvalue="Opción 1 seleccionada",
                      offvalue="Opción 1 no seleccionada")
opcion_1.pack()
opcion_1.deselect()

opcion_2 = Checkbutton(root,
                      text="Opción 2",
                      variable=control2,
                      onvalue="Opción 2 seleccionada",
                      offvalue="Opción 2 no seleccionada")

opcion_2.pack()
opcion_2.deselect()

muestra_seleccion = Button(root, text="Mostrar selección", command=seleccion).pack()

mainloop()

Resultado

El resultado son dos opciones que se pueden marcar las dos a la vez, o bien, solo una o ninguna.
Al utilizar StringVar(), puedes ver, cómo lo que envía al programa es un string y no un integer.

Resultado

Checkbutton() en Tkinter stringvar múltiples opciones.


Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.