Una variable es un sitio donde guardamos una determinada información. En función del tipo de información que guardemos (texto, números, booleanas, etc.), la variable será de uno u otro tipo. Cada variable tiene que tener un nombre con el que referirnos a ella. Python tiene en cuenta si escribimos en mayúsculas o minúsculas la variable (lo que se conoce como case sensitive). Como es lógico y, para evitar confusiones, el nombre de la variable no puede coincidir con los nombres de los «comandos» de Python (if, for, etc.).
Variables de Tipo Float en Python
En números hay dos tipos principales, los números enteros (llamados int) y los reales (llamados float). Aunque si no decimos el tipo de número que va a contener, Python intentará decidir por sí mismo cuál es el más apropiado, esto en ocasiones produce errores.
El tipo numérico float permite representar un número positivo o negativo con decimales, es decir, números reales. Si vienes de otros lenguajes, tal vez conozcas el tipo doble, lo que significa que tiene el doble de precisión que un float. En Python las cosas son algo distintas, y los float son en realidad double. Los valores float son almacenados de una forma muy particular, denominada representación en coma flotante.
También se puede declarar usando la notación científica con 'e' y el exponente. Por ejemplo, 1.93e-3 sería lo mismo que decir 1.93 multiplicado por diez elevado a -3. También podemos convertir otro tipo a float haciendo uso de float().
Alguna curiosidad es que los float no tienen precisión infinita. Los float a diferencia de los int tienen unos valores mínimo y máximos que pueden representar. Desafortunadamente, los ordenadores no pueden representar cualquier número, y menos aún si este es uno irracional. Afortunadamente, salvo aplicaciones muy concretas esto no resulta un problema.
Lea también: IVA 21% Excel
Variables de Control en Tkinter
Cuando trabajamos con interfaces gráficas, es fundamental que los datos de nuestros widgets puedan interactuar con el resto del programa. Para ello, Tkinter introduce el concepto de variables de control.
Las variables de control son objetos especiales que se asocian a los widgets para almacenar sus valores y facilitar su disponibilidad en otras partes del programa. Pueden ser de tipo numérico, de cadena y booleano. Las variables de control también se emplean para conectar varios widgets del mismo tipo, por ejemplo, varios controles del tipo Radiobutton.
Tkinter define la clase Variable, con la que podemos declarar variables que registra el sistema de modo que podamos saber cuándo se ha leído, escrito o cambiado. Las variables de Python no tienen esta característica, el desarrollador decide cuándo se lee, escribe o modifica una variable, por ejemplo cuando se pide al usuario un número entero es el desarrollador quien ha de comprobar si el usuario realmente ha introducido un número entero.
Esta clase tiene las subclases StringVar, IntVar, DoubleVar y BooleanVar, que restringen el valor devuelto por su método get(). Para trabajar con números de coma flotante, utilizaremos la subclase DoubleVar.
Declaración y Uso de DoubleVar
Los únicos tipos de variables para los que funciona la conexión directa con widgets son las variables que son subclases de la clase Variable, definida en el módulo Tkinter. Para declarar una variable de tipo float en Tkinter, se debe instanciar la clase DoubleVar.
Lea también: Guía IVA reducido
Algunos widgets, como las entradas de texto o los botones de opción, pueden conectarse directamente a variables de la aplicación mediante el uso de opciones especiales como textvariable. Esta conexión funciona en ambos sentidos: si la variable cambia por cualquier razón, el widget al que está conectada se actualizará para reflejar el nuevo valor.
Lo widgets de entrada de texto suelen usar una variable de este tipo para controlar su contenido. Por ejemplo, en el caso de un widget Entry, la opción textvariable permite vincular el contenido del campo de texto a una instancia de DoubleVar. El método set() asigna un valor a una variable de control, y el método get() obtiene el valor que tenga, en un momento dado, una variable de control.
Por ejemplo, al crear un widget Entry, se puede especificar la variable que almacenará el texto a representar mediante el atributo textvariable. Si se asocian a etiquetas, basta con cambiar el valor de la variable para que la etiqueta muestre otro contenido.
Validación de Entrada Float
Es importante tener en cuenta que, a pesar de vincular una entrada de texto a un número de coma flotante mediante DoubleVar, no se impide que el usuario ingrese un texto que no pueda ser interpretado como float. La clase DoubleVar gestiona el tipo internamente, pero el widget Entry por sí mismo permite cualquier entrada de texto.
Para conseguir una validación efectiva, se ha de crear una función que haga la comprobación y la valide devolviendo True o impida que se lleve a cabo el cambio de texto sugerido por el usuario, devolviendo False. Como esta función recibe parámetros y queremos vincularla a la entrada de texto, se ha de registrar antes la función, que se vinculará al widget mediante su atributo validatecommand y una tupla con el nombre de la función registrada y los parámetros que queremos enviar. Tk permite validar el contenido de una caja de texto (por ejemplo, para solo permitir números o fechas) en el momento en que el usuario escribe.
Lea también: ¿Cómo localizar tus XML del SAT?
