#image #python-3.x #user-interface #tkinter
#изображение #python-3.x #пользовательский интерфейс #tkinter
Вопрос:
Я экспериментирую с tkinter-GUI, но у меня возникли некоторые проблемы при работе с изображениями. Мой код выглядит так:
logo = PhotoImage(file="imagesource.gif")
w1 = Label(root, image=logo).pack(side="right")
Однако, когда я пытаюсь запустить свой код на Python 3.5.2, я получаю это сообщение об ошибке:
traceback (most recent call last):
File "~/Tkinter.py", line 4, in <module>
logo = PhotoImage(file="imagesource.gif")
File "~/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 3394, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "~/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 3350, in __init__self.tk.call(('image', 'create', imgtype, name,) options)_tkinter.TclError: couldn't recognize data in image file "image source.gif"
Кто-нибудь знает, как справиться с этой ошибкой?
Спасибо, Нарусан
Комментарии:
1. Вы абсолютно на 100% уверены, что файл является gif? Просто называя это, это не делает это так.
2. У меня MacBook Pro (macOS sierra), и когда он попросил меня изменить тип файла или только расширение, я нажал «тип файла», так что да, это должен быть gif
3. В нем также указано Kind: формат обмена графикой (GIF), так что да, я уверен на 100%
4. Попробуйте использовать
ImageTk
модуль frompillow
(fork of PIL):from PIL import ImageTk
,logo = ImageTk.PhotoImage(file="imagesource.gif")
. Также используйтеfile
команду для проверки фактического типа изображения вашего файла изображения в терминале :file imagesource.gif
.5. Если tkinter говорит, что не распознает данные, он не собирается лгать об этом. С вашими данными определенно что-то не так, если вы получаете эту ошибку.
Ответ №1:
Приведенные ниже команды будут работать как с python2, так и с python 3.
Сначала установите pillow:
pip install pillow
Код Python:
from PIL import ImageTk, Image
icon1 = ImageTk.PhotoImage(Image.open('image.jpg'))
btn = Button(window, image = icon1, command = find_file)