Найти - Пользователи
Полная версия: PIL и ttk.Treeview
Начало » Python для новичков » PIL и ttk.Treeview
1
kaper156
Здравствуйте. Есть некое приложение получающее объект класса Group(id, name, photo_50). Где photo_50 - ссылка на картинку.
def insert_group(self, group, _type, index=END):
        from PIL import Image, ImageTk
        import urllib.request
        import os.path
        img_path = './cache/%s_50.jpg' % group.id
        if not os.path.exists(img_path):
            if not os.path.exists('cache'):
                os.mkdir('cache')
            with open(img_path, 'wb') as img_file:
                img_file.write(urllib.request.urlopen(group.photo_50).read())
        image = Image.open(img_path)
        photo = ImageTk.PhotoImage(image, size=500)
        # Здесь выбирается Treeview, не обращайте внимание
        # ибо строка вставляется
        tv = self.my_table
        tv.insert('', index, image=photo, values=(group.name, group.__repr__()))
       
Проблема в том, что изображение стабильно загружается, но не показывается внутри приложения.
4kpt_III
Какая версия питона?
kaper156
4kpt_III
Какая версия питона?
$ python3
Python 3.4.3 (default, Mar 25 2015, 17:13:50) 
[GCC 4.9.2 20150304 (prerelease)] on linux
4kpt_III
Должно работать.
Смотрите. Я вставляю через конфигурирование.

values=((code, name, description, keywords, price))
table.insert("", "end", text="", tag=code, values=values)
table.tag_configure(code, image=image_obj)
WoMax
давно не юзал tkinter, но вроде такие случаи имел ввиду Лутц, когда писал:

“Отметьте также, что мы сохраняем ссылки на объекты изображений в списке – если этого не сделать, изображения будут уничтожены при утилизации их объектов сборщиком мусора, даже если в этот момент они будут отображаться на экране. Чтобы избежать такой неприятности, мы сохраняем ссылки на объекты в долгоживущем списке.”
4kpt_III
WoMax
Это не совсем то, но тоже важно. В скрипте вставляется одно изображение. Причем в теле функции. Поэтому тут не тот вариант.
kaper156
Сделал так.
        tv.insert('', index, text='Name', tag=group.id, values=(group.name, group.__repr__()))
        tv.tag_configure(group.id, image=photo, text=None)
Теперь через раз, то вот так ругает:
  File "/.../script.py", line 223, in insert_group
    tv.tag_configure(group.id, image=photo, text=None)
  File "/usr/lib/python3.4/tkinter/ttk.py", line 1450, in tag_configure
    tagname)
  File "/usr/lib/python3.4/tkinter/ttk.py", line 297, in _val_or_dict
    res = tk.call(*(args + options))
_tkinter.TclError: unknown option "pyimage1"
то вот так:
File "/.../script.py", line 223, in insert_group
    tv.tag_configure(group.id, image=photo, text=None)
  File "/usr/lib/python3.4/tkinter/ttk.py", line 1450, in tag_configure
    tagname)
  File "/usr/lib/python3.4/tkinter/ttk.py", line 297, in _val_or_dict
    res = tk.call(*(args + options))
_tkinter.TclError: value for "-text" missing
Но во втором варианте появляется изображение.
Подозреваю: нужно выводить только фото, а текст как-то занулить.

upd: Появилась фантастиш-тормоза идея. Если картинка только при исключении “_tkinter.TclError: value for ”-text“ missing”, то в лупе пытаться поймать именно её Но объем картинок может быть в 2000 и более.
4kpt_III
А вот это уже проблема, про которую написал WoMax
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB