Desarrollo de interfaces gráficas en Python 3 con Tkinter. Tomás Domínguez Mínguez

Читать онлайн.
Название Desarrollo de interfaces gráficas en Python 3 con Tkinter
Автор произведения Tomás Domínguez Mínguez
Жанр Математика
Серия
Издательство Математика
Год выпуска 0
isbn 9788426734013



Скачать книгу

se explicarán los cambios realizados sobre este. El primero es la incorporación de la sentencia que llama al método geometry() para establecer el tamaño inicial de la ventana en 200 × 50 píxeles:

illustration

      A continuación, se invoca el método resizable(), cuyo segundo argumento tiene el valor False, lo que indica que la ventana no se puede redimensionar en el eje Y (a lo alto):

illustration

      Las dos últimas sentencias que se han añadido establecen el ancho y el alto máximo y mínimo que puede tener la ventana principal. Puesto que con la sentencia anterior solo se permite redimensionarla a lo ancho, con estas limitará el tamaño entre 50 y 400 píxeles:

illustration

      Ejecute el programa y pruebe que, efectivamente, el comportamiento de la ventana principal es el esperado.

      Unidad 3

       POSICIONAMIENTO Y DISEÑO

      En el programa anterior, la interfaz se componía de un único widget. Pero, en la práctica, hasta la aplicación más sencilla que desarrolle requerirá más de uno. En ese caso, ¿cómo se indicaría la posición que debe ocupar cada uno de ellos en la ventana principal? La respuesta es haciendo uso de alguno de los tres gestores de geometría proporcionados por Tkinter:

      •pack. Organiza los widgets horizontal o verticalmente (por defecto, de arriba hacia abajo).

      •grid. Distribuye los widgets en cuadrícula, con una estructura similar a una tabla. Es el recomendado en interfaces gráficas complejas.

      •place. Coloca los widgets en coordenadas concretas.

illustration

      Los gestores de geometría se utilizan tanto para distribuir los widgets en la ventana principal como dentro de otros widgets contenedores (por ejemplo, los frames y los paneles que conocerá más adelante).

      Veamos en detalle cómo funciona cada uno de ellos.

      Este gestor de geometría distribuye los widgets en horizontal o en vertical. Para utilizarlo, se tiene que invocar el siguiente método, común a todos ellos:

illustration

      Las opciones disponibles son las siguientes:

      •expand. Establece el espacio que el gestor de geometría asignaría al widget dentro de la ventana principal (o widget contenedor). Si su valor fuera True, sería el máximo disponible.

      •fill. Determina si el widget debe ocupar todo el espacio asignado por el gestor de geometría o mantiene sus propias dimensiones. En el último caso, el valor que tomaría esta opción sería NONE (predeterminado). Por el contrario, si pudiera crecer/disminuir para ocupar el área máxima disponible, se debería indicar si lo haría a lo ancho (X), a lo alto (Y), o en ambas direcciones (BOTH).

      •side. De forma predeterminada, este gestor de geometría ubica los widgets de arriba hacia abajo (su valor es TOP). Aquí se puede cambiar esta forma de organizarlos para que se coloquen de abajo hacia arriba (BOTTOM), de izquierda a derecha (LEFT) o de derecha a izquierda (RIGHT).

illustration

      Recuerde que, para usar cualquier constante, previamente deberá haberla importado del módulo Tkinter. También puede usar directamente el valor que tiene cada una de ellas (por ejemplo, el de BOTTOM es "bottom", a TOP le correspondería "top", etc.).

      Para que pueda entender el funcionamiento conjunto de estas opciones, en las siguientes imágenes (tomadas de https://stackoverflow.com/questions/28089942/difference-between-fill-and-expandoptions-for-tkinter-pack-method) se puede apreciar el efecto producido por estas opciones sobre una etiqueta, cuyo texto indica los valores asignados a cada una de ellas.

      En la primera, el valor de la opción expand es False:

illustration

      En esta segunda, el valor de la opción expand es True:

illustration

      Como puede observar, muchas de las combinaciones de las tres opciones dan los mismos resultados, lo que indica que podrían obviarse. Así, por ejemplo, el resultado de la primera fila, en el que la etiqueta aparece centrada en la ventana, se podría conseguir utilizando únicamente la opción:

illustration

      Además de las opciones anteriores, las siguientes opciones permiten separar un widget de los límites de la ventana principal (o widget contenedor) y del resto de los widgets:

      •ipadx. Número de píxeles con los que se rellena el widget horizontalmente, dentro de sus bordes.

      •ipady. Número de píxeles con los que se rellena el widget verticalmente, dentro de sus bordes.

      •padx. Número de píxeles con los que se rellena el widget horizontalmente, fuera de sus límites.

      •pady. Número de píxeles con los que se rellena el widget verticalmente, fuera de sus límites.

      En la siguiente imagen, puede ver gráficamente cómo afectan estas opciones a la posición de una etiqueta (situada en la esquina superior izquierda de la ventana principal) y al texto que contiene (justificado a la izquierda). Se supone que, al crear tanto la ventana como la etiqueta, se han fijado sus dimensiones de forma explícita:

illustration

      Si no se hubieran indicado las dimensiones de la ventana, esta se ajustaría a las de los widgets que contuviera (en este caso, a las de la etiqueta). Por el mismo motivo, si no se hubiera especificado el ancho y el alto de la etiqueta, su tamaño correspondería al del texto que contuviera. La imagen de más abajo muestra gráficamente el resultado obtenido en ese caso:

illustration

      Por último, para dejar de mostrar un widget en la ventana principal (o widget contenedor), se debe ejecutar el método:

illustration

      Si quisiera volver a mostrar dicho widget, seguramente que no lo haría en la misma posición donde se encontraba antes de desaparecer, sino en aquella que le asigne el gestor de geometría una vez invocado el método pack() del resto de widgets.

      Para probar el funcionamiento de este gestor de geometría, puesto que el único widget que conoce por ahora son las etiquetas, creará cuatro etiquetas que distribuirá de dos formas diferentes. En primer lugar, lo hará según el comportamiento por defecto, es decir, de arriba hacia abajo: