PIL Изображение не отображается [дубликат]

>>> a = [1, 2, 3, 4, 5, 6]
>>> z = [(a[x], a[x+1]) for x in range(0, len(a)-1)]
>>> z
[(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
# Replacing it with the test
>>> z = [(a[x] == a[x+1]) for x in range(0, len(a)-1)]
>>> z
[False, False, False, False, False]
>>> if False in z : Print "All elements are not equal"
0
задан Codeja 25 October 2012 в 12:08
поделиться

1 ответ

После некоторого вмешательства я обнаружил, что изображение правильно отображается при сохранении в переменной GUI, то есть с помощью self

self.gif1 = PhotoImage(file='1.gif')
self.canvas.create_image(0, 0, image=self.gif1, anchor=NW)

Я понятия не имею, почему, но это работает, в то время как именование переменной просто gif1 (или любое другое имя), без self, нет. Протестировано как в коде, так и в минимальном примере.

Update: Как отметил @Bryan, сборщик мусора предоставляет экземпляр PhotoImage, когда __init__ заканчивается. Вы должны сохранить ссылку на экземпляр, выходящий за рамки конструктора, например. используя self или global. Учитывая эту проблему, лучше всего создать dict, сохранив изображения, используя имена карточек в качестве ключей.

1
ответ дан tobias_k 18 August 2018 в 18:17
поделиться
  • 1
    Причина в том, что сборщик мусора python выкинет изображение, когда обнаружит, что на нем нет ссылок. Сохраняя его как атрибут экземпляра класса, вы не позволяете сборщику мусора отбрасывать его. Использование локальной переменной, такой как «gif1», заставляет его собирать мусор, когда функция выходит. – Bryan Oakley 25 October 2012 в 14:51
  • 2
    THANKYOU SO MATCH tobias_k. Я «принял» ваш ответ, но, к сожалению, я пока не могу дать репутацию (я новичок на сайте .. & lt; 15). Я не могу сказать, насколько я ценю это, хотя – Codeja 26 October 2012 в 03:09
Другие вопросы по тегам:

Похожие вопросы: