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



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

relheight de uno de los widgets fuera de 0,25, su alto sería de 200 píxeles. La utilidad de este método es ajustar el tamaño de los widgets al de la ventana (o widget contenedor), cuando esta se modifique.

      •x. Coordenada x del punto utilizado como referencia para situar el widget en la ventana principal (o widget contenedor). Su valor viene dado en píxeles. Las coordenadas (0, 0) corresponden a la esquina superior izquierda de la ventana principal (o widget contenedor).

      •y. Coordenada y del punto utilizado como referencia para situar el widget en la ventana principal (o widget contenedor).

      •relx, rely. Posición relativa, tanto horizontal como vertical, representada como una fracción del alto y ancho de la ventana principal (o widget contenedor). Su valor, de nuevo, estará comprendido entre 0,0 y 1,0; por ejemplo, si el ancho de una ventana fuera de 500 píxeles y relx tuviera el valor 0,5, la coordenada x del widget sería 250. La utilidad de esta opción es mantener la posición de los widgets, aunque cambie el tamaño de la ventana.

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

illustration

      A continuación, se describe el código de un programa que muestra una etiqueta centrada en la ventana principal:

illustration

      Tras importar las clases Tk y Label del paquete Tkinter, se crea la ventana principal, a la que se asigna un tamaño de 200 × 200 píxeles.

      Luego, se crea la etiqueta y se muestra en el centro de la ventana con el método place(). Para que esta quede realmente centrada en dicha posición, se asigna el valor "center" al atributo anchor:

illustration

      Ejecute el programa y observe el resultado obtenido:

illustration

      El problema viene cuando se cambia el tamaño de la ventana. En ese caso, la etiqueta se mantendrá fija en las mismas coordenadas (100, 100), y dejará de estar centrada:

illustration

      Para resolverlo, puede evitar que el usuario modifique las dimensiones de la ventana con el método resizable(), o utilizar las opciones relx y rely (en vez de x e y) en el método place(). De esa forma, la posición de la etiqueta será relativa al tamaño de la ventana (no absoluta). Así, cuando la ventana se redimensione, la etiqueta seguirá estando centrada (en la misma posición relativa).

      Por lo tanto, sustituya la sentencia

illustration

      por:

illustration

      Vuelva a ejecutar el programa. Tal como se acaba de comentar, ahora la etiqueta aparecerá centrada, independientemente de las dimensiones de la ventana:

illustration illustration

      Se desaconseja el uso de este gestor de geometría (salvo en casos excepcionales), ya que requiere especificar la posición absoluta de cada elemento. Cualquier cambio posterior supondría rehacer de nuevo toda la interfaz.

      Unidad 4

       OPCIONES COMUNES

      En Tkinter, el aspecto de un widget se describe a través de una serie de características; algunas son específicas y otras son compartidas por muchos widgets. Estas características comunes son las siguientes:

      •Dimensiones: height, width, bd, borderwidth, border, padx, pady y highlightthickness.

      •Color: background (bg), activebackground, activeforeground, disabledbackground, disabledforeground, foreground (fg), highlightbackground y highlightcolor.

      •Fuente del texto: font.

      •Foco: takefocus.

      •Posición: anchor.

      •Relieve: relief.

      •Imágenes: bitmap, image y compound.

      •Cursor del ratón: cursor.

      Para asignar un valor a cualquiera de estas características, se utilizan keyword arguments. Como seguramente sepa, los argumentos de una función pueden ser de tipo positional o keyword. En el primer caso (el que estará acostumbrado a usar), cada argumento se identifica por su posición al invocar la función (o método); es decir, son posicionales.

      Los argumentos de tipo keyword van precedidos de su nombre, por lo que podrán ocupar cualquier posición. Esto es especialmente útil cuando hay muchos argumentos opcionales, como en el caso de la mayoría de los widgets.

illustration

      A las características también se las llama “opciones”, incluso “atributos”. Esta última acepción debe entenderse en el sentido general del término, es decir, como un rasgo o cualidad del widget (y no como lo que se entiende en Python como atributo de una clase).

      Veamos en detalle cada uno de estos grupos.

      Las primeras opciones que estudiará son las relacionadas con las dimensiones de diversas características de un widget, entre las que destacan:

      •bd, borderwidth o border. Ancho del borde utilizado para dar un aspecto tridimensional al widget.

      •height. Altura del widget. Dependiendo de su tipo, podrá ser un número de píxeles o líneas.

      •highlightthickness. Ancho del rectángulo que aparece alrededor del widget cuando tiene el foco.

      •padx. Espacio adicional, interno a los límites del widget, que se le añade horizontalmente.

      •pady. Espacio adicional, interno a los límites del widget, que se le añade verticalmente.

      •width. Ancho del widget. Dependiendo de su tipo, podrá ser un número de píxeles o caracteres.

illustration

      Cuando una opción tiene varios nombres, tenga en cuenta que puede haber widgets que solo admitan uno de ellos.

illustration

      Si el valor de una dimensión se especifica como un número seguido del carácter ‘c’, se estará especificando en centímetros; si se usa el carácter ‘m’, en milímetros; mientras que ‘i’ hará referencia a pulgadas (inches en inglés).

      En la primera práctica que realizará con este tipo de atributos comunes, modificará el programa ¡Hola Mundo! inicial para no tener que añadir los retornos de carro ni los espacios antes y después del texto, con el fin de evitar que