Tkinter Создание изображений в виджете Text
Я пытаюсь вставить картинку в текстовый виджет с помощью PhotoImage из https://tkdocs.com/tutorial/text.html
import tkinter as tk
win = tk.Tk()
text = tk.Text(win)
text.pack()
file = 'images/python.jpg'
image = tk.PhotoImage(file=file)
text.image_create('end', image=image)
win.mainloop()
Выбрасывает ошибку:
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "images/python.jpg"
Решил попробовать через PIL:
import tkinter as tk
from PIL import ImageTk, Image
win = tk.Tk()
text = tk.Text(win)
text.pack()
file = 'images/python.jpg'
img = Image.open(file)
image = ImageTk.PhotoImage(img)
text.image_create('end', image=image)
win.mainloop()
вроде всё отлично работает
Но когда я пытаюсь засунуть добавление картинки в процедуру:
import tkinter as tk
from PIL import ImageTk, Image
win = tk.Tk()
text = tk.Text(win)
text.pack()
file = 'images/python.jpg'
def add_image():
img = Image.open(file)
image = ImageTk.PhotoImage(img)
text.image_create('end', image=image)
add_image()
win.mainloop()
То изображение становится пустым:
Я пробовал через
with Image.open(file) as img:
(чтобы файл закрывался) Но ничего не менялось. Не понимаю в чём проблема.
Ответы (1 шт):
Автор решения: Сергей
→ Ссылка
- Tkinter поддерживает только форматы .gif, .ppm, .pnm и .png, поэтому в первой попытке ошибка.(.jpg)
Out of the box, Tk 8.5 includes support for GIF and PPM/PNM images. Tk 8.6 added PNG to this short list. https://tkdocs.com/tutorial/fonts.html
- Чтоб вашу картинку при выходе из функции не съел сборщик мусора, надо определить её в функции как глобальную - global image.
