2014-09-01 3 views
0

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

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

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

+0

Возможно, вам захочется быть более понятным, что вы подразумеваете под «возвратом пути к файлу изображения». Вы имеете в виду вернуть его в другую функцию? Или распечатать путь к виджету, чтобы сделать его видимым для пользователя? Или что-то еще? В принципе, больше информации было бы полезно. – Gustav

+0

Спасибо @Gustav Я отредактировал мой вопрос. –

+1

Кажется, что 'filename' может быть извлечен из результата' Image.open', но теряется при изменении размера изображения или при его превращении в 'PhotoImage'. –

ответ

1

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

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

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's documentation for the label widget для более подробной информации.

Если вы хотите перенаправить все операторы печати на виджет, который может быть полезен в зависимости от того, как разработан ваш графический интерфейс, создайте класс для перенаправления 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() 
Смежные вопросы