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 страница 7

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

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

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:

illustration

      Lo primero que se debe hacer es importar las clases que se van a utilizar del paquete Tkinter (Tk y Label):

illustration

      Luego, se crea la ventana principal:

illustration

      Acto seguido, se hace lo mismo con las cuatro etiquetas:

illustration

      Finalmente, se muestran en la ventana con el método pack(). Estas se rodean con un borde de un grosor de 10 píxeles de ancho y 5 de alto. Eso hace que la primera etiqueta se aleje del límite superior de la ventana 5 píxeles (tal como se indicó en la opción pady), al igual que la última etiqueta del borde superior. Sin embargo, la separación vertical entre etiquetas es de 10 píxeles (5 del superior y 5 del inferior). Con los límites derecho e izquierdo de la ventana también se mantiene un espacio de 10 píxeles, tal como se ha establecido en la opción padx:

illustration

      El resultado, como cabía esperar, son las cuatro etiquetas colocadas unas debajo de otras. La imagen de la izquierda muestra el resultado de la ejecución del programa, mientras que la imagen de la derecha muestra gráficamente el efecto de las opciones padx y pady, con las que se han separado las etiquetas de los límites de la ventana principal y entre sí:

illustration illustration

      Al utilizar las opciones padx y pady, ya no es necesario incluir los retornos de carro (carácter ‘\n’) ni los espacios en el texto de la etiqueta.

illustration

      Para que el espacio que se establezca a la derecha de un widget sea diferente que el de la izquierda, asigne una tupla con dos valores a la opción padx. Esto mismo es igualmente válido para la opción pady.

      En el siguiente programa, se utiliza la opción side para situar las etiquetas en cada uno de los lados de la ventana:

illustration

      De nuevo, se importan las clases Tk y Label de la librería Tkinter, pero, en este caso, también se hace lo mismo con las constantes TOP, BOTTOM, LEFT y RIGHT, que determinarán la posición de cada una de las etiquetas:

illustration

      Para que el efecto sea más visible,

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