Python Tkinter – найти путь к файлу изображения из PhotoImage

У меня есть PhotoImage в tkinter с именем al_p4, но я хочу иметь возможность распечатать путь к файлу изображения. Может ли кто-нибудь помочь. Вот мой код:

al_p4 = Image.open("Media/DVD/image.jpg").resize((100, 150), Image.ANTIALIAS)
al_p4 = ImageTk.PhotoImage(al_p4)

Заранее спасибо ребята ;)


person Music Champ29    schedule 01.09.2014    source источник
comment
Возможно, вы захотите уточнить, что вы подразумеваете под возвратом пути к файлу изображения. Вы имеете в виду вернуть его в другую функцию? Или распечатать путь к виджету, чтобы сделать его доступным для просмотра пользователю? Или что-то совсем другое? В принципе, больше информации было бы полезно.   -  person Gustav    schedule 02.09.2014
comment
Спасибо @Gustav, я отредактировал свой вопрос.   -  person Music Champ29    schedule 02.09.2014
comment
Кажется, что filename можно получить из результата Image.open, но он теряется, когда вы resize изображение или когда вы превращаете его в PhotoImage.   -  person tobias_k    schedule 02.09.2014


Ответы (2)


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

Если вам просто нужно распечатать его, и путь всегда будет постоянным, используйте:

print("Media/DVD/image.jpg")

Если вам нужно что-то напечатать и путь будет другим, попробуйте:

filepath = "Media/DVD/image.jpg"
al_p4 = Image.open(filepath).resize((100, 150), Image.ANTIALIAS)
al_p4 = ImageTk.PhotoImage(al_p4)
print(filepath)

Если вам нужно что-то напечатать в виджете, это будет зависеть от типа виджета, который вы хотите использовать. Для чего-то небольшого, например пути к файлу, метка, вероятно, подойдет. Дополнительные сведения см. в документации effbot для виджета ярлыков.

Если вы хотите перенаправить все операторы печати в виджет, что может быть полезно в зависимости от того, как спроектирован ваш графический интерфейс, создайте класс для перенаправления stdout. Вот пример с текстовым виджетом:

import sys
import Tkinter

def nothing():
    print("Nothing")

class Application(Tkinter.Frame):
    def __init__(self, master = None):
        Tkinter.Frame.__init__(self, master)

        self.button = Tkinter.Button(text = "Button 1", command = nothing)
        self.button.pack()

        class StdoutRedirector(Tkinter.Text):
            def __init__(self):
                Tkinter.Text.__init__(self)
             def write(self, message):
                 printout.insert(Tkinter.END, message)
        printout = StdoutRedirector()
        printout.pack()
        sys.stdout = printout

root = Tkinter.Tk()
app = Application(root)
app.mainloop()
person Gustav    schedule 03.09.2014

Я новичок в кодировании, поэтому я постараюсь изо всех сил =) Быстрый ответ: вам нужно использовать .filename в объекте PIL (не работает с объектом TK)

#Это изображение: al_p4 = Image.open("Media/DVD/image.jpg").resize((100, 150), Image.ANTIALIAS)

# Это для показа в Tkinter, обратите внимание, я добавил ..._TK al_p4_TK = ImageTk.PhotoImage(al_p4)

#Это путь к файлу, который, я думаю, вам нужен: print(al_p4.filename)

person V-cash    schedule 19.02.2021