Tomás Domínguez Mínguez

Desarrollo de interfaces gráficas en Python 3 con Tkinter


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

entre la que se encuentran:

      •minsize. Tamaño mínimo de la columna o de la fila indicada, en píxeles. Si no hubiera nada dentro, esta no aparecería.

      •weight. Permite que el tamaño de una columna o de una fila se adapte al de la ventana principal (o widget contenedor). El valor proporcionado establece el peso relativo de esta columna o fila respecto de las demás a la hora de distribuir el espacio existente.

      Para entender esta última opción, imagine que la ventana principal (representada por el objeto ventana_principal) se divide en una cuadrícula de dos filas y dos columnas, tal como se muestra en la siguiente imagen:

illustration

      Observe el resultado obtenido al añadir estas sentencias:

illustration

      Ahora, el espacio se distribuye en la proporción de tres cuartos para la primera columna y un cuarto para la segunda. Además, al haber utilizado esta opción, el ancho de las columnas se adaptará al de la ventana cuando esta se modifique (en la proporción indicada).

      El mismo razonamiento serviría para las filas. En ese caso, las sentencias que tendrían que añadirse son:

illustration

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

illustration

      Si volviera a mostrar dicho widget, lo haría en la misma posición donde se encontraba antes de desaparecer.

      Con el fin de practicar con este nuevo gestor de geometría, va a desarrollar un programa que muestre una etiqueta en cada una de las celdas de una cuadrícula, cuyo texto indique el número de la fila y la columna en la que está situada; por ejemplo, el texto de la etiqueta situada en la fila 1 y la columna 2 será Etiqueta12, tal como se muestra a continuación:

illustration

      El código del programa es el siguiente:

illustration

      En primer lugar, se importan las conocidas clases Tk y Label:

illustration

      Luego, se declaran las constantes que definen el número de filas y columnas que va a tener la rejilla en la que se van a distribuir las etiquetas:

illustration

      A continuación, se crea la ventana principal:

illustration

      El código principal de este programa está en los bucles for, mediante los que se crean y se sitúan las etiquetas en las posiciones correspondientes. El bucle exterior recorre las filas, mientras que el interior recorre las columnas:

illustration

      Las etiquetas se crean con un texto que contiene el número de la fila y de la columna donde se van a colocar. La opción bg determina que el color de fondo sea amarillo:

illustration illustration

      Más adelante, estudiará todas las opciones de configuración de las etiquetas.

      La siguiente sentencia sitúa cada etiqueta en la ventana principal con el método grid(). En este método se utilizan cuatro opciones: las que identifican la fila y la columna en la que deben ubicarse (row y column) y las que establecen los márgenes alrededor de cada una de ellas para separarlas entre sí (padx y pady):

illustration

      El resultado obtenido al ejecutar este programa lo puede ver a continuación:

illustration

      Ahora, redimensione la pantalla. Como podrá observar, las etiquetas se mantienen con el mismo tamaño y en la misma posición:

illustration

      Si quiere que las celdas se adapten al tamaño de la ventana, deberá utilizar los métodos columnconfigure() y rowconfigure(), tal como aparece en la nueva versión de este mismo programa:

illustration

      Ejecútelo de nuevo. En este caso, al aumentar el tamaño de la ventana, las celdas crecen para ocupar todo el espacio libre, pero no las etiquetas:

illustration

      Para que estas ocupen todo el espacio de las celdas, deberá utilizar la opción sticky del método grid(). En el programa anterior, sustituya la sentencia

illustration

      por esta otra:

illustration

      El resultado que obtendrá ahora demuestra que tanto las celdas como las etiquetas que hay en su interior se ajustan al tamaño de la ventana en todas las circunstancias:

illustration

      Este gestor, a diferencia de los dos anteriores, permite colocar los widgets en coordenadas específicas de la ventana principal (o widget contenedor). Para utilizarlo, se debe llamar al siguiente método, disponible en todos los widgets:

      place(opciones)

      Las opciones de las que dispone son:

      •anchor. Indica cómo situar el widget en la ventana, tomando como referencia las coordenadas (x, y) contenidas en las opciones x e y (se describen más abajo). Su valor puede ser N, S, E, W, NE, NW (predeterminado, esquina superior izquierda del widget), SE, SW o CENTER. La siguiente imagen lo muestra gráficamente (el cuadrado representa el widget tal como quedaría ubicado respecto del punto de referencia, dependiendo del valor de esta opción):

illustration

      •bordermode. Determina si las coordenadas especificadas usan como referencia el interior del widget contenedor (INSIDE, valor por defecto) o el exterior (OUTSIDE).

      •height, width. Alto y ancho del widget en píxeles.

      •relheight, relwidth. Ancho y alto del widget, tomado de forma relativa al ancho y alto de la ventana principal (o widget contenedor). Por lo tanto, determina sus dimensiones como una fracción de la ventana.