Использование изображения в качестве атрибута объекта класса, затем открытие этого изображения в виджете метки Tkinter - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в python и возился с Tkinter, а теперь и с Pillow.

Я пытаюсь сделать изображение атрибутом класса, а затем открыть его как изображение вэтикетка Tkinter.Вот пример кода.Мои окна Tkinter работают как раз тогда, когда я пытаюсь сделать именно это, поэтому, если в приведенном ниже коде Tkinter есть какие-либо ошибки, это просто в результате написания сэмплов.

class PicTest:
    def __init__(self, name, image):
        self.name = name
        self.image = image

foo = PicTest('foo', Image.open('foo.png'))

Это открывает изображениев новом окне

foo.image.show()

Но это выдает ошибку, когда я пытаюсь его запустить.

def testwindow:
    root = Tk()

    <necessary code>

    foo_testlabel = Label(root, image=foo.image, height=xxx, width=xxx)
    foo_testlabel.pack()

    mainloop()

Я получаю ошибку:

_tkinter.TclError: image "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=119x96 at 0x10D9FE240>" doesn't exist

Я успешно достиг результата, я хочу НЕ использовать этот метод (используя PhotoImage (file = xxxx), чтобы открыть все, что я хочу в моем определении Tkinter), но в идеале изображение является атрибутом объекта, поэтому я могу использовать его в другом месте.

Есть мысли о том, как это сделать?

Спасибо!

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете «создать» PhotoImage файла и затем сохранить его в self.image, а затем использовать его при необходимости.Вот пример.

import tkinter as tk

class PicTest:
    def __init__(self, name, image):
        self.name = name
        self.image = tk.PhotoImage(file=image)

root = tk.Tk()
foo = PicTest('foo', '/path/to/image/file')

def testwindow():
    foo_testlabel = tk.Label(root, image=foo.image)
    foo_testlabel.pack()

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