¿Cómo agregar una imagen en tkinter?

¿Cómo agrego una imagen en Tkinter?

Esto me dio un error de syntax:

root = tk.Tk() img = ImageTk.PhotoImage(Image.open(path)) panel = tk.Label(root, image = img) panel.pack(side = "bottom", fill = "both", expand = "yes") root.mainloop() 

No hay un “Error de Sintaxis” en el código de arriba, ya sea que ocurrió en alguna otra línea (el código de arriba no es todo su código, ya que no hay importaciones, ni la statement de su variable de path ) o si recibió algún otro tipo de error .

El ejemplo anterior funcionó bien para mí, probando en el intérprete interactivo.

Python 3.3.1 [MSC v.1600 32 bit (Intel)] en win32 14.May.2013

Esto funcionó para mí, siguiendo el código anterior

 from tkinter import * from PIL import ImageTk, Image import os root = Tk() img = ImageTk.PhotoImage(Image.open("True1.gif")) panel = Label(root, image = img) panel.pack(side = "bottom", fill = "both", expand = "yes") root.mainloop() 

El siguiente código funciona en mi máquina

  1. Probablemente le falte algo a su código.
  2. Por favor, compruebe también la encoding de los archivos de código.
  3. asegúrese de tener instalado el paquete PIL

     import Tkinter as tk from PIL import ImageTk, Image path = 'C:/xxxx/xxxx.jpg' root = tk.Tk() img = ImageTk.PhotoImage(Image.open(path)) panel = tk.Label(root, image = img) panel.pack(side = "bottom", fill = "both", expand = "yes") root.mainloop() 

No es un lib estándar de python 2.7. Entonces, para que estos funcionen correctamente y si está usando Python 2.7, primero debe descargar la biblioteca PIL: Enlace de descarga directa: http://effbot.org/downloads/PIL-1.1.7.win32-py2.7. Después de instalarlo, sigue estos pasos:

  1. Asegúrese de que su script.py esté en la misma carpeta con la imagen que desea mostrar.
  2. Edita tu script.py

     from Tkinter import * from PIL import ImageTk, Image app_root = Tk() #Setting it up img = ImageTk.PhotoImage(Image.open("app.png")) #Displaying it imglabel = Label(app_root, image=img).grid(row=1, column=1) app_root.mainloop() 

¡Espero que ayude!

Su código real puede devolver un error basado en el formato de los puntos de path del archivo. Dicho esto, algunos formatos de imagen como .gif, .pgm (y .png si tk.TkVersion> = 8.6) ya son compatibles con la clase PhotoImage .

A continuación se muestra un ejemplo que muestra:

Lenna (.png)

o si tk.TkVersion < 8.6 :

Lenna (.gif)

 try: # In order to be able to import tkinter for import tkinter as tk # either in python 2 or in python 3 except ImportError: import Tkinter as tk def download_images(): # In order to fetch the image online try: import urllib.request as url except ImportError: import urllib as url url.urlretrieve("http://sofes.miximages.com/user-interface/IgD2r.png", "lenna.png") url.urlretrieve("http://sofes.miximages.com/user-interface/sML82.gif", "lenna.gif") if __name__ == '__main__': download_images() root = tk.Tk() widget = tk.Label(root, compound='top') widget.lenna_image_png = tk.PhotoImage(file="lenna.png") widget.lenna_image_gif = tk.PhotoImage(file="lenna.gif") try: widget['text'] = "Lenna.png" widget['image'] = widget.lenna_image_png except: widget['text'] = "Lenna.gif" widget['image'] = widget.lenna_image_gif widget.pack() root.mainloop() 

Es un problema de la versión de Python. Si está utilizando la última versión, entonces su antigua syntax no funcionará y le dará este error. Por favor, siga el código de @Josav09 y estará bien.

Aquí hay un ejemplo para Python 3 que puede editar para Python 2;)

 from tkinter import * from PIL import ImageTk, Image from tkinter import filedialog import os root = Tk() root.geometry("550x300+300+150") root.resizable(width=True, height=True) def openfn(): filename = filedialog.askopenfilename(title='open') return filename def open_img(): x = openfn() img = Image.open(x) img = img.resize((250, 250), Image.ANTIALIAS) img = ImageTk.PhotoImage(img) panel = Label(root, image=img) panel.image = img panel.pack() btn = Button(root, text='open image', command=open_img).pack() root.mainloop() 

introduzca la descripción de la imagen aquí