Python GUI Imagen en Label

Un control Label normalmente nos permite mostrar un texto en una ventana, el texto es estático y no se puede modificar, pero otra de las cosas que podemos hacer con un Label es utilizarlo para mostrar una imagen.

En el ejemplo anterior vimos como crear una ventana y agregar un label, lo que haremos ahora será utilizar ese label para mostrar una determinada imagen, si necesitas saber como se crea la ventana mira el ejemplo anterior: Python GUI ventanas.

from tkinter import Label
widget = Label(None, text='Hola GUI tkinter')
widget.pack()
widget.mainloop() 


Mostrar Imagen en Label


El código que mostramos es del ejemplo anterior, de como mostrar una ventana, agregaremos un objeto de la clase PhotoImage o BitmapImage para cargar una imagen de nuestro ordenador, luego esa imagen la podemos mostrar en controles como el label, button, entre otros.

Para abrir una imagen con PhotoImage hay que pasarle el nombre de la imagen al atributo file, si la imagen no se encuentra en el mismo directorio del archivo .py debemos indicar la ruta completa, esta clase admite el formato GIF y PPM/PGM.

from tkinter import *
ventana = Tk()
img = PhotoImage(file="tutor de programacion.gif")
widget = Label(ventana, image=img).pack()
ventana.mainloop() 

1. Imagen en label
No solo podemos agregarle imágenes a los label sino también a los botones, para tener botones mas vistosos, o los menús.

También existen otras formas de mostrar imágenes como por ejemplo usando un canvas, aprenderemos a hacerlo mas adelante, o utilizando librerías de procesamiento de imágenes como PIL.

Mostrar Imagen en Canvas


Para finalizar les dejo un ejemplo sencillo y practico de como agregar una imagen a una ventana utilizando un elemento canvas.

from tkinter import *
win = Tk()
img = PhotoImage(file="tutor de programacion.gif")
can = Canvas(win)
can.pack(fill=BOTH)
can.create_image(20, 20, image=img, anchor=NW)
win.mainloop()

nota: La imagen debe estar en formato gif y en el mismo directorio del código fuente para que este ejemplo funcione correctamente, para usar otra imagen solo cambiar el atributo file de la clase PhotoImage con el nombre de la nueva imagen.

La clase BitmapImage funciona del mismo modo solo que admite archivos de tipo .xbm.

Descarga Python GUI Images

Siguiente: Botones

Comentarios

  1. Hola para poder ejecutar esto, debo destacar que funciona para archivos .gif y ( from tkinter import * ) el comando interno de python es "Tkinter" con T mayúscula. gracias

    ResponderEliminar
    Respuestas
    1. Para esta serie de tutoriales tkinter me he enfocado en la versión 3 de python, por lo que si alguien desea ejecutar el código en python 2 deberá hacer ciertas modificaciones, por ejemplo el cambio en la " T " que mencionas.

      Eliminar
  2. hola nececito hayuda con el siguiente error:

    ***************************************************************************************
    File "C:\Python34\lib\tkinter\__init__.py", line 3335, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
    _tkinter.TclError: couldn't recognize data in image file "jack.gif"
    ***************************************************************************************

    el codigo es el siguiente:
    ------------------------------------------------------------------------------------------------------
    from tkinter import *
    import f23

    def escribe():
    lista.insert(END,"hola")

    def lista():
    agenda = open ("agendatelefonica.csv")
    numero = 0
    for i in range(1,6):
    lectura = agenda.readline()
    ## print (lectura.replace(",","-"))
    lista.insert(END,lectura.replace(",","-"))
    numero = numero + 1
    agenda.close()


    f = Frame(height=300,width=300)
    f.pack(padx=20,pady=20)


    logoimg = PhotoImage(file="jack.gif")
    etiquetalogo = Label(f,image = logoimg)
    etiquetalogo.pack(side=TOP,padx=10,pady=10)
    ----------------------------------------------------------------------------------------------------------

    GRASIAS anticipadas....
    Saludos :-)

    ResponderEliminar
  3. la imagen esta en las misma carpeta que el archivo del codigo, ademas he probado con otras imagenes y formatos distintos.. y nada de nada.... :-(

    ResponderEliminar
    Respuestas
    1. Puede ser que el formato de la imagen imagen no sea correcto aunque su extensión sea .gif, probé el código con la imagen que viene en los ejemplos en el enlace de descarga que esta al final del post y funciona correctamente, la única modificación que hice fue comentar import f23.

      Eliminar
  4. Alguien me puede decir como hacer para que no se sobrescriba un label es decir como limpiarlo antes de un próximo resultado gracias

    ResponderEliminar
  5. Hola tengo el siguiente codigo, pero no aparece la imagen, osease si coloco las intrucciones sin la funcion aparece perfecto, pero al incluir estas dentro de la funcion creada solo muestra el canvas, no encuentro el error o el bug.


    from Tkinter import *

    def imagen():
    canvas = Canvas(ventana,width=900,height=500)
    img = PhotoImage(file="captura.gif") # solo soporta imagenes .gif .pgm o .pmm
    canvas.create_image(0,0,anchor=NW,image=img)
    canvas.pack()

    ventana=Tk()
    ventana.title("Poligonos")
    ventana.config(bg="gray")
    ventana.geometry("1000x600")
    boton= Button(ventana,text="Crear imagen", command=imagen)
    boton.pack()

    ventana.mainloop()

    ResponderEliminar
  6. dentro del codigo de la funcion si esta indentado, pero blogger me lo publica sin la indentacion xd

    ResponderEliminar
  7. Hola, tengo una duda he creado un canvas y dentro de el se muestra una imagen, la cual selecciono desde un botón para abrirla ,el problema es que no se como hacer para que mi imagen que se muestra se redimencione al tamaño en el que tengo creado mi canvas, ya que estas son de diferentes tamaños y no se ven completas. Mi objetivo solo es que se visualicen en el canvas pero redimencionandolas al mismo tamaño y se ajuste dentro de el.
    dejo parte de mi código ojala me puedas ayudar.Gracias.

    ventana.filename=filedialog.askopenfilename(initialdir="C:/Users/dine/drive/imágenes")
    ruta=ventana.filename
    imagen = Image.open(ruta)
    imagenL = ImageTk.PhotoImage(imagen)
    canvas.create_image(210,140,anchor=NW,image=imagenL)

    ResponderEliminar
  8. ¿Cómo hago para que el gif se mueva?

    ResponderEliminar
  9. como se puede manipular el tamaño de la imagen?

    ResponderEliminar
  10. Hola!
    Cómo hago para subir varias imágenes en varias label en una misma ventana hija toplavel en python? Cuál es el método? porque no se pueden subir como se hace en la ventana principal. Si se sube una, no deja subir más...

    ResponderEliminar
  11. No se si me expliqué bien. La cosa es así: Tengo una ventana hija (TopLevel) y en ella quiero posicionar 4 Label cada una con una imagen distinta... La cosa es que eso no se puede hacer como en las ventanas principales o padres...

    ResponderEliminar
  12. Estoy agregan do imágenes a un "Frame", sin embargo cuando destruyo un "Frame" para crear otro y en este ultimo coloco imágenes incluso las mismas que la de mi frame1, estas imágenes no se logran ver (se ven de color blanco pero con sus dimensiones correctas), agradeceré cualquier tipo de ayuda.
    from tkinter import *

    def Personas():
    vent_bienv.config(bg="red4")
    frame2 = Frame(vent_bienv, bg="LightBlue1", width=660,
    height=460)
    frame2.place(x=10, y=10)
    Lino = PhotoImage(file="Personas//imagen1.png")

    Linolbl = Label(frame2, image=Lino).place(x=0, y=0)


    def Bienv():


    global continuar,vent_bienv
    vent_bienv=Tk()
    vent_bienv.title("FCU")
    vent_bienv.geometry("680x480")
    vent_bienv.resizable(0,0)
    frame1 = Frame(vent_bienv, bg="LightBlue1", width=680,
    height=480)
    frame1.pack(padx=10, pady=10)

    i = PhotoImage(file="FC1.gif")

    lblfondo=Label(frame1,image=i).place(x=0,y=0)





    continuar= Button(frame1,text="Continuar", bg="green",fg="white",command=lambda:[frame1.destroy(),Personas()])
    continuar.place(x=320,y=400)

    vent_bienv.mainloop()
    Bienv()

    ResponderEliminar
    Respuestas
    1. Hola, me pasa algo similar... Cuando quiero agregar un label con imagen a un frame, me aparace el label con las dimensiones la de la imagen pero muestra el label en blanco, supiste como solucionarlo?

      Eliminar
    2. Hola, proba con poner el place en otra linea, me ha pasado con las imagenes
      el lugar de: lblfondo=Label(frame1,image=i).place(x=0,y=0)
      proba asi:
      lblfondo=Label(frame1,image=i)
      lblfondo.place(x=0,y=0)

      Eliminar

Publicar un comentario

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Histogramas OpenCV Python

Python Binance API