Изображение не отображается на холсте tkinter - PullRequest
0 голосов
/ 15 июня 2019
  • Обновлено после возможности репликации проблемы.

Изначально я мог заставить его работать, привязав ключ к холсту, почему это сработало, я не знаю, но потом это тоже перестало работать, поэтому я продолжил исследование.

После настройки некоторых тестов мне удалось создать короткий код, который повторяет проблему:

from tkinter import *


class SomeClass:
    def __init__(self, master):
        self.can = Canvas(master, bg="gray")
        self.can.pack()

        thing = PhotoImage(file=("./img/thing.PNG"))

        img = self.can.create_image(20, 20, image=thing)

        stuff = self.can.find_all()
        print(stuff)


app = Tk()

SomeClass(app)  # Does not work

something = SomeClass(app)  # Dos not work

# This part does work:
can = Canvas(app, bg="gray")
can.pack()
thing = PhotoImage(file=("./img/thing.PNG"))

img = can.create_image(20, 20, image=thing)

stuff = can.find_all()
print(stuff)

app.mainloop()

Во всех случаях img отображается как элемент в find_all (), но первые два не показывают его на холсте.

Также пытался поместить создание образа как метод с привязкой, чтобы активировать его, думая, что оно пошло не так во время инициализации. Это ничего не изменило.

Так что я здесь не так делаю?

1 Ответ

0 голосов
/ 17 июня 2019

Итак, отвечая на мой собственный вопрос, я наконец узнал, что происходит не так.

Я не читал эту строку в документации по PhotoImage:

"Вы должны сохранить ссылкук объекту изображения в вашей программе на Python, либо сохраняя его в глобальной переменной, либо присоединяя его к другому объекту. "

Таким образом, в этом случае способ заставить его работать - сделать:

app = Tk()
thing = PhotoImage(file=("./img/thing.PNG")) # making it a global variable

или

class SomeClass:
    def __init__(self, master):
        self.can = Canvas(master, bg="gray")
        thing = PhotoImage(file=("./img/thing.PNG")
        self.can.img = thing   # This attaches the image to the canvas object

Надеюсь, это поможет всем, кто сталкивается с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...