60 - tkinter : control Radiobutton

Otro control visual muy común es el Radiobutton que normalmente se muestran un conjunto de Radiobutton y permiten la selección de solo uno de ellos. Se los debe agrupar para que actúen en conjunto, es decir cuando se selecciona uno automáticamente se deben deseleccionar los otros.

Problema:

Mostrar dos controles de tipo Radiobutton con las etiquetas "Varón" y "Mujer", cuando se presione un botón actualizar una Label con el Radiobutton seleccionado.

Programa: ejercicio224.py

Ver video

import tkinter as tk

class Aplicacion:
    def __init__(self):
        self.ventana1=tk.Tk()
        self.seleccion=tk.IntVar()
        self.seleccion.set(2)
        self.radio1=tk.Radiobutton(self.ventana1,text="Varon", variable=self.seleccion, value=1)
        self.radio1.grid(column=0, row=0)
        self.radio2=tk.Radiobutton(self.ventana1,text="Mujer", variable=self.seleccion, value=2)
        self.radio2.grid(column=0, row=1)
        self.boton1=tk.Button(self.ventana1, text="Mostrar seleccionado", command=self.mostrarseleccionado)
        self.boton1.grid(column=0, row=2)
        self.label1=tk.Label(self.ventana1,text="opcion seleccionada")
        self.label1.grid(column=0, row=3)
        self.ventana1.mainloop()

    def mostrarseleccionado(self):
        if self.seleccion.get()==1:
            self.label1.configure(text="opcion seleccionada=Varon")
        if self.seleccion.get()==2:
            self.label1.configure(text="opcion seleccionada=Mujer")

aplicacion1=Aplicacion() 

La ejecución de esta aplicación muestra una interfaz visual similar a esta:

tkinter Radiobutton

Definimos dos objetos de la clase Radiobutton e iniciamos el parámetro variable con la referencia de un objeto de la clase IntVar:

        self.radio1=tk.Radiobutton(self.ventana1,text="Varon", variable=self.seleccion, value=1)
        self.radio1.grid(column=0, row=0)
        self.radio2=tk.Radiobutton(self.ventana1,text="Mujer", variable=self.seleccion, value=2)
        self.radio2.grid(column=0, row=1)

Previamente hemos definido el objeto de la clase IntVar que se encuentra en el módulo tk:

        self.seleccion=tk.IntVar()
        self.seleccion.set(2)

Aparece seleccionado por defecto el Radiobutton con la etiqueta "Mujer" ya que mediante el método set fijamos el valor 2.

Cuando se presiona el botón analizamos el valor almacenado en el objeto IntVar:

    def mostrarseleccionado(self):
        if self.seleccion.get()==1:
            self.label1.configure(text="opcion seleccionada=Varon")
        if self.seleccion.get()==2:
            self.label1.configure(text="opcion seleccionada=Mujer")

Problema:

Disponer dos controles de tipo Entry para el ingreso de enteros. Mediante dos controles Radiobutton permitir seleccionar si queremos sumarlos o restarlos. Al presionar un botón mostrar el resultado de la operación seleccionada.

Programa: ejercicio225.py

Ver video

import tkinter as tk

class Aplicacion:
    def __init__(self):
        self.ventana1=tk.Tk()
        self.label1=tk.Label(self.ventana1,text="Ingrese primer valor:")
        self.label1.grid(column=0, row=0)
        self.dato1=tk.StringVar()
        self.entry1=tk.Entry(self.ventana1, width=20, textvariable=self.dato1)
        self.entry1.grid(column=1, row=0)
        self.label2=tk.Label(self.ventana1,text="Ingrese segundo valor:")
        self.label2.grid(column=0, row=1)
        self.dato2=tk.StringVar()
        self.entry2=tk.Entry(self.ventana1, width=20, textvariable=self.dato2)
        self.entry2.grid(column=1, row=1)
        self.seleccion=tk.IntVar()
        self.radio1=tk.Radiobutton(self.ventana1,text="Sumar", variable=self.seleccion, value=1)
        self.radio1.grid(column=1, row=2)
        self.radio2=tk.Radiobutton(self.ventana1,text="Restar", variable=self.seleccion, value=2)
        self.radio2.grid(column=1, row=3)
        self.boton1=tk.Button(self.ventana1, text="Operar", command=self.operar)
        self.boton1.grid(column=1, row=4)
        self.label3=tk.Label(self.ventana1,text="resultado")
        self.label3.grid(column=1, row=5)
        self.ventana1.mainloop()        

    def operar(self):
        if self.seleccion.get()==1:
            suma=int(self.dato1.get())+int(self.dato2.get())
            self.label3.configure(text=suma)
        if self.seleccion.get()==2:
            resta=int(self.dato1.get())-int(self.dato2.get())
            self.label3.configure(text=resta)

aplicacion1=Aplicacion() 

La ejecución de esta aplicación muestra una interfaz visual similar a esta:

tkinter Radiobutton

Cuando se presiona el botón se dispara el método 'operar':

        self.boton1=tk.Button(self.ventana1, text="Operar", command=self.operar)

En el método operar rescatamos de los objeto StringVar los valores ingresados en los controles Entry:

    def operar(self):
        if self.seleccion.get()==1:
            suma=int(self.dato1.get())+int(self.dato2.get())
            self.label3.configure(text=suma)
        if self.seleccion.get()==2:
            resta=int(self.dato1.get())-int(self.dato2.get())
            self.label3.configure(text=resta)

Problema propuesto

  • Disponer tres controles de tipo Radiobutton con las etiquetas 'Rojo', 'Verde' y 'Azul'. Cuando se presione un botón cambiar el color de fondo del formulario.
    Si consideramos que la variable ventana1 es un objeto de la clase Tk, luego si queremos que el fondo sea de color rojo debemos llamar al método configure y en el parámetro bg indicar un string con el color a activar ("red", "green" o "blue"):

                self.ventana1.configure(bg="red")
    

    Ver video

Solución

ejercicio226.py

import tkinter as tk

class Aplicacion:
    def __init__(self):
        self.ventana1=tk.Tk()
        self.seleccion=tk.IntVar()
        self.seleccion.set(1)
        self.radio1=tk.Radiobutton(self.ventana1,text="Rojo", variable=self.seleccion, value=1)
        self.radio1.grid(column=0, row=0)
        self.radio2=tk.Radiobutton(self.ventana1,text="Verde", variable=self.seleccion, value=2)
        self.radio2.grid(column=0, row=1)
        self.radio2=tk.Radiobutton(self.ventana1,text="Azul", variable=self.seleccion, value=3)
        self.radio2.grid(column=0, row=2)
        self.boton1=tk.Button(self.ventana1, text="Cambiar color", command=self.activar)
        self.boton1.grid(column=0, row=3)
        self.ventana1.mainloop()        

    def activar(self):
        if self.seleccion.get()==1:
            self.ventana1.configure(bg="red")
        if self.seleccion.get()==2:
            self.ventana1.configure(bg="green")
        if self.seleccion.get()==3:
            self.ventana1.configure(bg="blue")

aplicacion1=Aplicacion()