¿Cómo puedo cerrar una imagen que se muestra al usuario con la biblioteca de imágenes de Python?

Tengo varias imágenes que me gustaría mostrar al usuario con Python. El usuario debe ingresar alguna descripción y luego debe mostrarse la siguiente imagen.

Este es mi código:

#!/usr/bin/python # -*- coding: utf-8 -*- import os, glob from PIL import Image path = '/home/moose/my/path/' for infile in glob.glob( os.path.join(path, '*.png') ): im = Image.open(infile) im.show() value = raw_input("Description: ") # store and do some other stuff. Now the image-window should get closed 

Está funcionando, pero el usuario tiene que cerrar la imagen por sí mismo. ¿Puedo hacer que Python cierre la imagen después de ingresar la descripción?

No necesito PIL. Si tiene otra idea con otra biblioteca / progtwig bash (con subproceso), también estará bien.

El método de show “se destina principalmente a fines de depuración” y genera un proceso externo para el que no se maneja, por lo que no se puede eliminar de forma adecuada.

Con PIL, es posible que desee utilizar uno de sus módulos GUI, como ImageTk , ImageQt o ImageWin .

De lo contrario, solo genera manualmente un visor de imágenes desde Python con el módulo de subprocess :

 for infile in glob.glob( os.path.join(path, '*.png')): viewer = subprocess.Popen(['some_viewer', infile]) viewer.terminate() viewer.kill() # make sure the viewer is gone; not needed on Windows 

psutil puede obtener el pid del proceso de display creado por im.show() y im.show() el proceso con ese pid en cada sistema operativo:

 import time import psutil from PIL import Image # open and show image im = Image.open('myImageFile.jpg') im.show() # display image for 10 seconds time.sleep(10) # hide image for proc in psutil.process_iter(): if proc.name() == "display": proc.kill() 

He modificado esta receta antes para hacer un trabajo de imagen en Python. Utiliza Tkinter , por lo que no requiere ningún módulo además de PIL.

 '''This will simply go through each file in the current directory and try to display it. If the file is not an image then it will be skipped. Click on the image display window to go to the next image. Noah Spurrier 2007''' import os, sys import Tkinter import Image, ImageTk def button_click_exit_mainloop (event): event.widget.quit() # this will cause mainloop to unblock. root = Tkinter.Tk() root.bind("