Devuelve una tupla que contiene las coordenadas del ratón respecto de la pantalla de su ordenador (no respecto de la ventana principal).
•winfo_pointerx(). Devuelve el valor x de la tupla anterior.
•winfo_pointery(). Devuelve el valor y de la tupla anterior.
Para practicar con algunos de estos métodos, especialmente los relacionados con la posición del ratón, en esta última práctica va a mostrar las coordenadas de su posición dentro de la ventana principal. Fuera de ella, aparecerá el valor −1, −1.
El código del programa es el siguiente:
En la primera sentencia, se importa la clase Tk para crear la ventana principal y Label para mostrar las coordenadas del ratón:
Las siguientes sentencias, de sobra conocidas por usted, crean la ventana principal (root), a la que se asigna un tamaño de 400 × 200 píxeles, además de la etiqueta (etiqueta), con la que se mostrarán las coordenadas del ratón en el centro de la ventana:
Por último, se llama a la función responsable de presentar la posición del ratón en todo momento:
En ella, lo primero que se hace es obtener la información necesaria para calcular las coordenadas del ratón relativas a la ventana principal (no hay ninguna función que la proporcione directamente). Para ello, en las variables x e y se almacenan las coordenadas del ratón respecto de la pantalla del ordenador. Por su parte, root_x y root_y contendrán las coordenadas de la esquina superior izquierda de la ventana principal, también respecto de la pantalla del ordenador:
Con la información anterior, las coordenadas x, y del ratón relativas a la ventana principal se calculan como:
Por último, las variables ancho_pantalla y alto_pantalla guardarán el ancho y alto de la ventana principal (recuerde que puede redimensionarse):
La sentencia if que viene a continuación se utiliza para mostrar el valor “−1, −1” cuando el ratón se encuentre fuera de la ventana, en cuya condición se utiliza el ancho y alto de la ventana principal, obtenido anteriormente:
Una vez conocidas las coordenadas del ratón relativas a la ventana principal (mouse_x y mouse_y), se muestran en la etiqueta modificando la opción text con el método configure():
Por último, transcurridos 10 milisegundos, se vuelve a ejecutar esta función para mostrar la nueva posición en la que pudiera encontrarse el ratón. Para ello, se hace uso del conocido método after():
Observe un ejemplo de lo que vería cuando ejecutara el programa, situando el ratón en la parte inferior derecha de la ventana:
Aunque mueva o modifique el tamaño de la ventana principal, el programa seguirá funcionando correctamente.
Unidad 6
VARIABLES DE CONTROL
Las variables de control son un tipo especial de variables, que se asocian a ciertos widgets para almacenar valores de entrada o visualización de información. Un ejemplo del primer caso serían los datos introducidos por el usuario en un campo de entrada de texto. Dichos datos quedarían a disposición del programa cuando fueran necesarios. Otro ejemplo, en este caso de visualización de información, sería el texto mostrado por una etiqueta, que cambiaría al modificarse el valor de la variable de control que tuviera asociada.
En el caso de las etiquetas, otra forma de modificar el texto que contienen es asignando el nuevo texto a la opción text con el método configure(), tal como ha podido comprobar en una práctica anterior.
La forma de asociar una variable de control a un widget es mediante la opción textvariable.
Una variable de control es un objeto que puede almacenar un número (entero o de coma flotante), una cadena o un valor booleano. Dependiendo del tipo de datos que contenga, dicho objeto será de la clase IntVar, DoubleVar, StringVar o BooleanVar. Sus constructores son:
Para poder usar alguna de estas clases, primero deberá importarla. Además, solo podrán crearse variables de control (objetos de estas clases) después de la ventana principal. De lo contrario, obtendría el siguiente error:
AttributeError: ‘NoneType’ object has no attribute ‘_root’
Si quisiera asignar un valor a la variable de control en el momento de crearla, estos constructores pueden invocarse con la opción value.
Otra forma de asignar un valor a una variable de control, una vez creada, es invocando el método:
set(valor)
Para obtener el valor que contiene, el método al que tendría que llamar es:
get()
Por último, si lo que desea es saber cuándo es leída, escrita o borrada, Tkinter ofrece el método:
trace(suceso, función)
El suceso puede tomar los valores "r", "w" y "u", dependiendo de si está interesado en saber cuándo se lee, se escribe o se borra su contenido, respectivamente. El segundo argumento es la función que se invocaría al producirse dicho evento.
En la siguiente práctica va a utilizar una variable de control para modificar el texto de una etiqueta, lo cual provocará un efecto de desplazamiento hacia la derecha:
El código utilizado para ello es el siguiente:
En primer lugar, se importan las clases necesarias, que son las utilizadas para crear la ventana principal (Tk), la etiqueta (Label) y, en especial, la variable de control con el texto que se mostrará en cada momento, StringVar():
Luego, se declaran las variables de configuración