Читать книгу Desarrollo de interfaces gráficas en Python 3 con Tkinter - Tomás Domínguez Mínguez - Страница 26

5.4 MANEJO DE DIMENSIONES Y POSICIONES

Оглавление

En este apartado, se estudian todos los métodos relacionados con la obtención de las dimensiones de un widget, la ventana principal e, incluso, la pantalla. También conocerá los métodos necesarios para saber la posición de un widget en la ventana principal (o widget contenedor), así como la de la ventana o el ratón en la pantalla.

El primero que veremos devuelve las dimensiones y la posición de un widget en la ventana principal (o widget contenedor). Si, en vez de un widget, se tratara de la propia ventana principal, la posición devuelta sería la que ocupa en la pantalla:


El valor devuelto es una cadena con el siguiente formato:

anchoxalto±x±y

Los valores +x determinan la distancia entre el lado izquierdo del widget y el de la ventana, en píxeles. Si el signo fuera negativo, sería la distancia entre el lado derecho del widget y el de la ventana. Los valores +y indican la distancia entre el límite superior de la ventana y el del widget. Si el signo fuera negativo, sería la distancia entre el límite inferior de la ventana y el del widget; por ejemplo, un widget de 50 píxeles de ancho y 20 de alto, cuya esquina superior izquierda estuviera situada en la posición (200, 100), se describiría como:



Hasta que el gestor de geometría no asigne los tamaños y las posiciones correspondientes a todos los widgets que se muestran en la ventana principal, su valor inicial es "1x1+0+0". Para asegurarse de que el valor obtenido esté actualizado, invoque antes update_idletasks().

Métodos relacionados con el método anterior:

•winfo_rootx(). Devuelve la coordenada x del lado izquierdo de la ventana principal respecto de la pantalla del ordenador. Si tuviera un borde, haría referencia a su parte exterior.

•winfo_rooty(). Devuelve la coordenada y del lado superior de la ventana principal respecto de la pantalla del ordenador. Si tuviera un borde, haría referencia a su parte exterior.

•winfo_x(). Devuelve la coordenada x del lado izquierdo del widget respecto de la ventana principal (o widget contenedor). Si tuviera un borde, haría referencia a su parte exterior.

•winfo_y(). Devuelve la coordenada y del lado superior del widget respecto de la ventana principal (o widget contenedor). Si tuviera un borde, haría referencia a su parte exterior.

•winfo_width(). Devuelve el ancho del widget. Si el objeto sobre el que se invoca es de la clase Tk, corresponderá al ancho de la ventana principal.

•winfo_height(). Devuelve el alto del widget. Si el objeto sobre el que se invoca es de la clase Tk, corresponderá al alto de la ventana principal.


En caso de querer obtener el ancho y el alto establecido con las opciones width y height de un widget, deberá usar los métodos winfo_ reqwidth() y winfo_reqheight(), respectivamente. Como el gestor de geometría lo ajustará para encajarlo con el resto de los widgets que se muestran en la ventana principal (o widget contenedor), dichos valores no tienen por qué ser los mismos que los asignados a dichas opciones.

Si lo que desea conocer es el tamaño de la pantalla del ordenador, llame a los métodos:

•winfo_screenwidth(). Devuelve el ancho de la pantalla en píxeles.

•winfo_screenheight(). Devuelve el alto de la pantalla en píxeles.

El último grupo de métodos devuelve las coordenadas del ratón:

•winfo_pointerxy(). 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.

Desarrollo de interfaces gráficas en Python 3 con Tkinter

Подняться наверх