Saltar a contenido

Visualizar imagenes en tkinter

Vamos a crear un programa que permita visualizar archivos de imágenes.

Crear ventana

Todas las funciones de nuestra aplicación van a ser métodos de una clase que representa la aplicación:

Visor02.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import tkinter as tk

class App:
    def __init__(self, ventana):
        self.ventana = ventana                     # guarda una referencia a la ventana
                                                   # como parte de la info que maneja la app

        self.ventana.title('Visor de imágenes')    # accedemos a la ventana gracias a la
        self.ventana.geometry('800x600')           # propiedad "ventana"

ventana = tk.Tk()    # Crea la ventana
App(ventana)         # Crea una instancia de la clase App
                     # No la guardamos en ninguna variable porque no es necesario
ventana.mainloop()   # Inicia el gestor de eventos

Ejecutando esto, se muestra una ventana en blanco con un tamaño de 800x600 pixels y un título "Visor de imágenes".

Geometría

Podemos establecer las dimensiones de una ventana mediante:

ventana.geometry(geometría)

La geometría estable el ancho y alto del componente, en este caso, la ventana. Opcionalmente podemos añadir la posición en pantalla, todo ello en una cadena de texto que tkinter analizará. El formato es (sin espacios en blanco):

"ancho x alto + x + y"

siendo x,y las coordenadas donde de la esquina superior izquierda de la ventana en el escritorio. Por ejemplo, una geometría '120x50-0+20' mostrará una ventana de 120 x 50 pixels, pegada al borde superior de la pantalla, y desplazada 20 pixels respecto al margen derecho.

Añadir paneles y botones

Vamos a añadir un panel con dos botones, y debajo, un panel donde se visualizará la imagen:

Visor02.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
import tkinter as tk

class App:
    def __init__(self, ventana):
        self.ventana = ventana
        self.ventana.title('Visor de imágenes')
        self.ventana.geometry('800x600')

        # Añadir un panel para botones. Es un objeto dee la clase Frame
        self.panelBotones = tk.Frame(self.ventana)
        self.panelBotones.pack()

        # Añadir un botón "Salir" al panel
        self.btnSalir = tk.Button(self.panelBotones, text='Salir', command=self.ventana.destroy)
        self.btnSalir.pack(side='left')

        # Añadir un botón "Abrir" al panel
        self.btnAbrir = tk.Button(self.panelBotones, text='Abrir')
        self.btnAbrir.pack(side='left')

        # Añadir un panel para mostrar la imagen

        self.panelImagen = tk.Label(self.ventana)
        self.panelImagen.pack()


ventana = tk.Tk()
App(ventana)
ventana.mainloop()

Lo que muestra:

El panel para mostrar la imagen es un objeto de la clase Label. En principio se usa para mostrar un texto, pero también sirve para mostrar una imagen.

En el capítulo siguiente veremos como cargar y mostrar la imagen.