как отобразить и закрыть изображение в python?

Я хотел бы отобразить изображение в python и закрыть его после того, как пользователь введет имя изображения в терминале. Я использую PIL для отображения изображения, вот код:

im = Image.open("image.jpg")
im.show()

мое приложение отображает это изображение, но задача пользователя-распознать объект на изображении и написать ответ в терминале. Если ответ введен правильно, пользователь должен получить другое изображение. Проблема с PIL заключается в том, что я не могу закрыть изображение, а с исследованием единственным решением было убить процесс просмотра изображений, но это не очень надежный и элегантный. Есть ли другие библиотеки для отображения изображений, которые имеют такие методы, как .выставка и. закрыть() ?

3 ответов


просто откройте любой просмотрщик/редактор изображений в отдельном процессе и убейте его, как только пользователь ответит на ваш вопрос, например

from PIL import Image
import subprocess

p = subprocess.Popen(["display", "/tmp/test.png"])
raw_input("Give a name for image:")
p.kill()

Terminal предназначен для работы с линейным потоком команд-это означает, что он задает вопрос, ответы пользователя, а затем может задать другой вопрос. То, что вы пытаетесь сделать здесь, - это сделать две вещи: показать изображение и одновременно задать пользователю вопрос. Для этого вы можете сделать две вещи:

Многопроцессорность

вы можете запустить новый поток / процесс и заставить PIL показать изображение с помощью этого потока, а тем временем в первом поток / процесс задайте пользователю вопрос. Затем после ответов пользователя вы можете закрыть другой поток / процесс. Вы можете взглянуть на Python threading модуль (ссылке) для получения дополнительной информации о том, как вы можете сделать это.

GUI

вместо того, чтобы сделать свой пользовательский интерфейс в терминале, сделайте простое приложение GUI, используя любую структуру, которую вам удобно. Мне лично нравится в составе PyQt4. Qt - очень мощный инструментарий разработки GUI и PyQt4-это обертка для него. Если вы делаете GUI, то то, что вы пытаетесь сделать, довольно тривиально.


может быть излишним, но для меня наиболее простым и надежным решением просто использовать библиотек matplotlib как он правильно отслеживает цифры, которые он создает, например:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

imgplot = plt.imshow(mpimg.imread('animal.png'))
plt.ion()
plt.show()
animal_name = raw_input("What is the name?: ")
plt.close()