El control visual Checkbutton permite implementar un botón de dos estados, más conocido como un cuadro de selección.
Mostrar una ventana y en su interior tres controles de tipo Checkbutton cuyas etiquetas correspondan a distintos lenguajes de programación. Cuando se presione un botón mostrar en una Label la cantidad de Checkbutton que se encuentran chequeados.
import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.seleccion1=tk.IntVar() self.check1=tk.Checkbutton(self.ventana1,text="Python", variable=self.seleccion1) self.check1.grid(column=0, row=0) self.seleccion2=tk.IntVar() self.check2=tk.Checkbutton(self.ventana1,text="C++", variable=self.seleccion2) self.check2.grid(column=0, row=1) self.seleccion3=tk.IntVar() self.check3=tk.Checkbutton(self.ventana1,text="Java", variable=self.seleccion3) self.check3.grid(column=0, row=2) self.boton1=tk.Button(self.ventana1, text="Verificar", command=self.verificar) self.boton1.grid(column=0, row=4) self.label1=tk.Label(self.ventana1,text="cantidad:") self.label1.grid(column=0, row=5) self.ventana1.mainloop() def verificar(self): cant=0 if self.seleccion1.get()==1: cant+=1 if self.seleccion2.get()==1: cant+=1 if self.seleccion3.get()==1: cant+=1 self.label1.configure(text="cantidad:"+str(cant)) aplicacion1=Aplicacion()
La ejecución de esta aplicación muestra una interfaz visual similar a esta:
A cada control de tipo Checkbutton lo asociamos con un objeto de la clase IntVar (por defecto el objeto de la clase IntVar almacena un cero indicando que el Checkbutton debe aparecer no seleccionado):
self.seleccion1=tk.IntVar() self.check1=tk.Checkbutton(self.ventana1,text="Python", variable=self.seleccion1) self.check1.grid(column=0, row=0)
Cuando se presiona el botón se ejecuta el método 'verificar' donde analizamos que almacenan los objetos seleccion1, seleccion2 y seleccion3. En el caso de almacenar un 1 significa que el Checkbutton asociado está seleccionado:
def verificar(self): cant=0 if self.seleccion1.get()==1: cant+=1 if self.seleccion2.get()==1: cant+=1 if self.seleccion3.get()==1: cant+=1 self.label1.configure(text="cantidad:"+str(cant))
Disponer un control Checkbutton que muestre el siguiente mensaje: ¿Está de acuerdo con los términos y condiciones?, además agregar un Button desactivo. Cuando se tilde el Checkbutton inmediatamente activar el botón.
import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.seleccion=tk.IntVar() self.check1=tk.Checkbutton(self.ventana1,text="¿Está de acuerdo con los términos y condiciones?", variable=self.seleccion, command=self.cambiarestado) self.check1.grid(column=0, row=0) self.boton1=tk.Button(self.ventana1, text="Entrar", state="disabled", command=self.ingresar) self.boton1.grid(column=0, row=1) self.ventana1.mainloop() def cambiarestado(self): if self.seleccion.get()==1: self.boton1.configure(state="normal") if self.seleccion.get()==0: self.boton1.configure(state="disabled") def ingresar(self): self.ventana1.title("Ingresando...") aplicacion1=Aplicacion()
La ejecución de esta aplicación muestra una interfaz visual similar a esta:
Inmediatamente se inicia la aplicación el botón aparece desactivo (es decir el operador no lo puede presionar) debido a que hemos inicializado el parámetro state con el valor "disabled":
self.boton1=tk.Button(self.ventana1, text="Entrar", state="disabled", command=self.ingresar)
Otro concepto importante de este ejemplo es que podemos asociar un evento a un control de tipo Checkbutton mediante el parámetro "command" (el mismo se ejecuta cada vez que hacemos un cambio en el control):
self.check1=tk.Checkbutton(self.ventana1,text="¿Está de acuerdo con los términos y condiciones?", variable=self.seleccion, command=self.cambiarestado)
El método "cambiarestado" tiene por objetivo activar o desactivar el botón según el estado del Checkbutton:
def cambiarestado(self): if self.seleccion.get()==1: self.boton1.configure(state="normal") if self.seleccion.get()==0: self.boton1.configure(state="disabled")
ejercicio229.py import tkinter as tk class Aplicacion: def __init__(self): self.ventana1=tk.Tk() self.seleccion1=tk.IntVar() self.check1=tk.Checkbutton(self.ventana1,text="Chrome", variable=self.seleccion1, command=self.cambiartitulo) self.check1.grid(column=0, row=0) self.seleccion2=tk.IntVar() self.check2=tk.Checkbutton(self.ventana1,text="FireFox", variable=self.seleccion2, command=self.cambiartitulo) self.check2.grid(column=1, row=0) self.seleccion3=tk.IntVar() self.check3=tk.Checkbutton(self.ventana1,text="Edge", variable=self.seleccion3, command=self.cambiartitulo) self.check3.grid(column=2, row=0) self.seleccion4=tk.IntVar() self.check4=tk.Checkbutton(self.ventana1,text="Opera", variable=self.seleccion4, command=self.cambiartitulo) self.check4.grid(column=3, row=0) self.ventana1.mainloop() def cambiartitulo(self): cadena=''; if self.seleccion1.get()==1: cadena+="Chrome - " if self.seleccion2.get()==1: cadena+="Firefox - " if self.seleccion3.get()==1: cadena+="Edge - " if self.seleccion4.get()==1: cadena+="Opera" self.ventana1.title(cadena) aplicacion1=Aplicacion()