Я не использую Python 3, но могу дать ответ, который работает в Python 2.5+.Я предполагаю, что код будет работать почти одинаково на Python 3.
Прежде чем мы начнем, нам нужно импортировать Tkinter и создать корневое окно:
import Tkinter as tk
root = tk.Tk()
Далее, чтобы загрузить изображение сurllib:
import urllib
URL = "http://www.smellymonkey.com/monkeys/images/ill-monkey.gif"
u = urllib.urlopen(URL)
raw_data = u.read()
u.close()
Теперь у вас есть двоичные данные для изображения в переменной raw_data
.Tkinter принимает опцию data
, но, к сожалению, вы не можете передать ей эти необработанные данные.Ожидается, что данные будут закодированы как base64.Это достаточно просто сделать:
import base64
b64_data = base64.encodestring(raw_data)
image = tk.PhotoImage(data=b64_data)
Теперь, когда у нас есть изображение, пора вывести его на экран:
label = tk.Label(image=image)
label.pack()
Теперь вы должны увидеть изображение на экране.
Вышесказанное работает только для изображений .gif, но с другими форматами изображений почти так же легко работать.Самый простой способ - записать необработанные данные изображения на диск (или использовать urllib для прямой загрузки данных в файл) и ссылаться на файл при создании объекта PhotoImage
.Конечно, это работает только для форматов изображений, которые напрямую поддерживаются классом PhotoImage
.
Ваш другой выбор - использовать PIL (Python Image Library), которая поддерживает множество различных форматов изображений.Техника остается примерно такой же, только вы должны сначала создать изображение PIL, а затем преобразовать его в формат, используемый Tkinter.Для получения дополнительной информации о PIL обратитесь к Руководству по библиотеке изображений Python , а также к документации effbot по Tkinter PhotoImage Class