Formularios con el widget Radiobutton() y variables de control - Tkinter desde cero - Capítulo 7


En este capítulo veremos cómo añadir el tipo de widget Radiobutton(). Este tipo de formulario nos mostrará una serie de opciones y solo podremos seleccionar una de las disponibles.

Pero antes de empezar viendo cómo poner estos Radiobutton() tenemos que saber lo que son las variables de control de Tkinter.

Variables de control de Tkinter

Las variables de control son objetos especiales asociados a los widgets de Tkinter para almacenar sus valores. De esta forma vamos a poder trabajar correctamente con los diferentes tipos de formularios que tiene.
Tenemos variables de tipo numérico para los enteros (IntVar) y DoubleVar para los floats. También tenemos una variable para los strings llamada StringVar y otra para los booleanos, BooleanVar.

Las variables de control las vamos a utilizar para conectar también varios widgets del mismo tipo. Es decir si tenemos varias opciones Radiobutton() podremos relacionar las posibles opciones, creando así un grupo de widgets.

Veamos un ejemplo práctico, voy a escribir dos Radiobutton() y los voy a relacionar.

Código

from tkinter import *
root = Tk()

x = IntVar()

titulo = Label(root,text="Seleccione una opción").grid(row=0)

Radiobutton(root,
           text="Esta es la primera opción.",
           value=1,
           variable=x).grid(row=1)

Radiobutton(root,
           text="Esta es la segunda opción.",
           value=2,
           variable=x).grid(row=2)

root.mainloop()

Resultado

Ya tenemos dos opciones y ahora sí lo ejecutamos no va a hacer nada por el momento pero ya podemos marcar una de las dos opciones, puesto que en este tipo de formulario eso es lo que debe ocurrir.
En este momento si hago clic en la opción número uno, lo que va a pasar es que en la x está almacenando el valor integer 1 y si pulso la segunda opción dos se almacena el número 2. Sabiendo esto ya podemos hacer otro tipo de operaciones.

Cómo puedes observar en el código, tengo una variable x con un valor IntVar(), lo que la convierte en variable de control de Tkinter de tipo integer.

Para establecer la relación lo hacemos con el atributo variable de cada Radiobutton().

Radiobutton Tkinter

Radiobutton Tkinter

Radiobutton Tkinter

Opción por defecto con Radiobutton()

Si quieres mostrar una opción por defecto lo puedes hacer con un set. Por defecto, saldrá esa opción marcada.
Añade este set debajo de la declaración de la variable x:

Código

x.set(value=1)

No obstante, esto nos va a dar un problema, y es que al hacer un set, independientemente de la opción que marquemos, va a ser en el programa siempre la 1. Puedo demostrarlo con get:

Código

opcion_set = Label(root, text=x.get()).grid(row=3)

Resultado

Pese a estar marcando la segunda opción, por culpa del set, siempre se queda la opción 1.

Radiobutton Tkinter

Para que se actualice la opción seleccionada en cada momento, deberás crear una función que sea capaz de actualizarla. Simplemente pones el label dentro de la función:

Código

def actualiza(value):
    Label(root, text=value).grid(row=3)

Para ejecutar esta función, le añadimos un command a cada Radiobutton():

Código

Radiobutton(root,
           text="Esta es la primera opción.",
           value=1,
           variable=x, command=lambda: actualiza(x.get())).grid(row=1)

Radiobutton(root,
           text="Esta es la segunda opción.",
           value=2,
           variable=x, command=lambda: actualiza(x.get())).grid(row=2)

Resultado

Ahora, cada opción va a enviar su valor correspondiente.

Radiobutton Tkinter

Radiobutton Tkinter

Dejo el capítulo aquí y en el siguiente veremos un poco más sobre los Radiobutton()


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.