Visualizar imagenes en tkinter (II)¶
Una vez creado el embrión del programa, el siguiente paso es cargar y mostrar un archivo de imagen.
Bibliotecas¶
Cuando pulsemos en el botón "Abrir", queremos que se muestre una ventana de diálogo para seleccionar la imagen a cargar. Usamos el módulo filedialog:
from tkinter import filedialog as dialogo
Para trabajar con imágenes, vamos a usar la biblioteca
Pillow. Importamos los módulos
Image e ImageTk.
from PIL import Image, ImageTk
El primero sirve para procesar imágenes. Pero Pillow y Tkinter son bibliotecas
diferentes, y el módulo ImageTk crea imágenes en la memoria RAM que pueden
mostrarse en una ventana Tkinter.
Cargar imagen¶
Todavía no hemos definido el comando a ejecutar al pulsar en el botón "Abrir". Le vamos a asignar un método de la propia aplicación:
self.btnAbrir = tk.Button(self.panelBotones, text='Abrir', command=self.abrir)
y definimos el método a ejecutar:
def abrir(self):
self.archivo = dialogo.askopenfilename()
try:
self.imagen = Image.open(self.archivo)
except:
return
self.mostrar()
def mostrar(self):
self.tk_imagen = ImageTk.PhotoImage(self.imagen)
self.panelImagen.configure(image=self.tk_imagen)
Véase que obtenemos el nombre del archivo y lo guardamos como propiedad de la aplicación:
self.archivo = dialogo.askopenfilename()
Conocido el nombre del archivo, intentamos cargarlo y guardamos la imagen resultante como propiedad de la aplicación:
self.imagen = Image.open(self.archivo)
Seguidamente vamos a mostrarlo. Esta tarea la hacemos en un método aparte al
que llamaremos mostrar(). Usamos el módulo ImageTk de la biblioteca
Pillow para obtener una imagen utilizable por Tkinter:
self.tk_imagen = ImageTk.PhotoImage(self.imagen)
y se lo asignamos al panel:
self.panelImagen.configure(image=self.tk_imagen)
CXon lo que, en la memoria RAM, tenemos dos imágenes:
- un objeto Imagen propio de la biblioteca Pillow
- un objeto ImageTk.PhotoImage adaptado a Tkinter
El programa completo:
| Visor03.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |