Mostrando entradas con la etiqueta Etiqueta. Mostrar todas las entradas
Mostrando entradas con la etiqueta Etiqueta. Mostrar todas las entradas

miércoles, 22 de mayo de 2024

INTERFACES. Python.

Etiqueta de texto

Interfaces con Python

Una vez que hemos aprendido a crear la ventana, podemos empezar a incluir elementos en ella. Empezaremos por un componente sencillo y muy útil: una etiqueta o label.

Las etiquetas tienen una utilidad evidente: sirven para aportar información, bien como recurso para facilitar el input, bien para informar de los resultados obtenidos como consecuencia de procesamiento.

En el primer caso estamos pensando en TkInter como herramienta para la fase de entrada de información (input) y en el segundo entendemos que TkInter nos proporciona un medio para el output. En cualquiera de los dos, las etiquetas aportan la información necesaria para facilitar la comunicación entre la aplicación y el usuario.

Normalmente esa información es textual, pero también puede ser gráfica, así que necesitamos aprender a utilizar las etiquetas también como soporte para mostrar imágenes en la GUI, pero en esta entrada nos limitaresmos a aprenderemos a trabajar con etiquetas de texto, dejando el uso de imágenes para la siguiente.

Obviamente antes de utilizar una etiqueta debemos implementar la ventana en la que ésta residirá, así que empezaremos por aplicar lo aprendido en la entrada anterior, referida a la creación de ventanas. No es mala práctica, ya que es lo que deberemos hacer cada vez que aprendamos a utilizar un componente de TkInter.


import tkinter as tk

ventana = tk.Tk()
ventana.title("Primera ventana tKinter")
ventana.geometry('500x500')
ventana.configure(background="dark turquoise")

ventana.mainloop()

Deberemos situar el código que sigue antes de la última línea del anterior, pero esa es tarea para la puesta en práctica de esta "lección", por lo que queda de tu cuenta. Yo me limitaré ahora a explicar cómo implementar la etiqueta, que es lo que corresponde.

  1. Declaro la etiqueta (la nombro) y la identifico como elemento TkInter
    • etq = tk.Label(ventana, text = "Hola Mundo", bg="red",fg="white")
    • Observa cómo se escribe Label y cómo se asocia como componente de TkInter (tk.Label).
    • El contenido del paréntesis que sigue es muy importante ya que...
      • Asocia la etiqueta con la ventana
      • Establece el contenido de la etiqueta (text = ... )
      • Y da forma: el color de fondo de la etiqueta (bg) y el color del texto (fg)
  2. Después posiciono la etiqueta en la ventana.
    • etq.pack()
    • Esta sería la forma más simple y una de las formas de posicionar la etiqueta dentro de la ventana, pero no la única, como tendremos ocasión de ver. Además podemos aportar información que ayuda a controlar mejor y más en detalle el posicionamiento de la etiqueta. Para ello, dentro del paréntesis incluiremos lo siguiente:
      • etq.pack(fill=tk.X,padx=20,pady=10,ipadx=5,ipady=5,side=tk.LEFT)
    • fill expande la etiqueta en el eje de las X
    • padx y pady establece un margen alrededor de la etiqueta en ambas coordenadas
    • ipadx e ipady dan un margen alrededor del texto de la etiqueta, lo que implica también que dentro de ella.
  3. Una alternativa muy útil cuando la GUI es suficientemente compleja, es sustituir la escritura directa del texto en la etiqueta (ver 1) por el uso de una variable. en ese caso:
    • Primero debemos escribir la variable, cosa que, como sabemos, en Python se hace directamente:
      • sTexto = "La Casa Por El Tejado" -> Declara, tipifica y da contenido a la variable sTexto
    • Y sustituimos el texto de text por el nombre de la variable
      • etq = tk.Label(ventana, text = sTexto, bg="red",fg="white")

Aquí te dejo enlace al archivo .py con las alternativas de uso de la etiqueta para que analices los posibles usos de ambas.

INTERFACES. Python.

TkInter. Etiquetas con imágenes

Interfaces con Python

Ya vimos cómo utilizar etiquetas para mostrar texto. Ahora aprenderemos a utilizar una etiqueta para mostrar imágenes. La función de esta opción es fundamentalmente estética (mejorar la apariencia de la GUI), pero también puede tener utilidad si las imágenes permiten ilustrar los conceptos que se trabajan en la propia GUI.

Lo primero que hay que saber es que existe una limitación de base: la imagen debe presentarse en formato .gif para ser mostrada en la etiqueta, además de estar ubicada en el mismo directorio en el que ubiquemos el script.

El resto (el código y su explicación) te lo muestro a continuación. Sigo aquí la explicación de Lilina Castañón (2017), añadiendo elementos y variaciones de mi cosecha. El script completo te queda accesible desde el enlace correspondiente al final de la entrada.

Primer paso: la primera novedad consiste en declarar la variable a asociar a la imagen:

  • img = tk.PhotoImage(file="imgtk.gif")
  • img =img.subsample(2,2)

La primera instrucción asocia la variable img con la función (el método) tk.PhotImage(), que tiene file como atributo. Observa que el nombre de la imagen va entre comillas.

Se plantea aquí una primera cuestión: la identificación del archivo de la imagen indica que se encuentra en el mismo directorio que el script, pero ¿sería posible ubicarlo en un subdirectorio dentro de éste?

Para ello creo dicho subdirectorio y modifico la primera línea de código...

  • img = tk.PhotoImage(file="img/imgtk.gif")

... y obtengo un resultado satisfactorio, luego es posible redireccionar la búsqueda del archivo img.gif a la posición deseada, pero habrá que tenerlo en cuenta a la hora de trasladar los materiales a un potencial usuario de los mismos. Para lo que interesa en este análisis, utilizaré la segunda formulación a fin de hacer más eficiente la gestión de recursos.

La segunda línea...

  • img =img.subsample(2,2)

... tiene dos particularidades: se trata del uso de un segundo método asociado directamente a la gestión o trabajo con archivos de imagen img.subsample() y tiene como objetivo establecer un tamaño de imagen en sus dos dimensiones (ancho y alto) y en términos de proporción: (1,1) significa tamaño real, (2,2) significa la mitad del tamaño y así sucesivamente.

Segundo paso (después de crear la ventana, evidentemente). Consiste en declarar la etiqueta y asignarle la imagen como contenido:

  • etq1 = tk.Label(image=img)

Esta es la forma básica, pero caben otras posibles que modifican la presentación que deriva de la anterior formulación. Algunas de ellas pueden ser de interés, otras no tanto.

  • tq1 = tk.Label(ventana,image=img)
  • etq1 = tk.Label(ventana,image=img,bg="red")
  • etq1 = tk.Label(ventana,image=img,text="Hola",bg="red")

Todas estas formulaciones añaden la referencia a la ventana, que curiosamente parece innecesaria cuando resulta fundamental en caso de etiquetas de texto.

La segunda de estas tres formulaciones incluye el atributo color de fondo (bg), que es admisible y funcional, por lo que lo recomiendo. La tercera incluye contenido textual, pero, aunque no da error, tampoco surte ningún efecto, predominando absolutamente la imagen, por lo que resulta superfluo.

Por mi parte, recomiendo el uso de la segunda de estas alternativas:

  • etq1 = tk.Label(ventana,image=img,bg="red")

Tercer paso. Consiste en asociar la etiqueta a la GUI mediante la fórmula etq1.pack(), la más simple, pero no la única, ya que también es posible (y creo que deseable) añadir referencias de tamaño y posicionamiento, como en esta segunda formulación...

  • etq1.pack(padx=30,pady=30,ipadx=10,ipady=10)

... que es válida, funcional y preferible por más completa.

Para finalizar, aquí accedes al script trabajado en esta entrada.