Вы не должны ни изменять метод __init__()
, ни хранить список ссылок, поскольку это всегда один и тот же файл изображения.Здесь что-то, что избегает использования ненужных ресурсов, поэтому будет использовать меньше памяти (и, вероятно, будет быстрее).
Это достигается путем проверки того, существует ли атрибут one
или нет, а если нет, то только тогда считывает данные изображения и создает PImageTk.PhotoImagehotoImage
в первый раз.
Этот подход позволяет создавать несколько Canvas
объектов изображения виджета из одного ImageTk.PhotoImage
вместо загрузки нескольких его копий в память.
def _create_image(self, coord):
(x,y) = coord
if not getattr(self, 'one', None): # First call?
pil_img = Image.open("test.jpg")
self.one = ImageTk.PhotoImage(pil_img)
self.canvas.create_image(x-25, y-25, image=self.one,
anchor='nw', tags="image")
Вы также можете выполнитьсоздание ImageTk.PhotoImage
всего в одной строке:
# pil_img = Image.open("test.jpg") # Leave out.
self.one = ImageTk.PhotoImage(file="test.jpg")