2016-05-17 8 views
0

Ich versuche, eine einfache Benutzeroberfläche in Python 2.7 mit Tkinter-Modul zum Durchsuchen und Auswählen von Bild und zeigt es auf der Benutzeroberfläche, aber wenn ich das Bild und dann das aktuelle Bild (zunächst geladenes Bild) auf dem Bildschirm wird gelöscht, aber das ausgewählte Bild wird nicht auf dem Bildschirm angezeigt.Bild nicht angezeigt in Python Tkinter in UI

from Tkinter import * 
from PIL import ImageTk, Image 
import tkFileDialog 

root = Tk() 
root.title('Simple Image Display app') 

w = Canvas(root, width=1100, height=600) 
w.pack() 
root.resizable(width=FALSE, height=FALSE) 

img = ImageTk.PhotoImage(Image.open('test_2.JPG').convert('LA')) 
panel = Label(root, image = img) 
panel.place(x=700,y=100) 


def Open():  ## function to open file dialog and select the file to use in the reader application 
    dialog = Tk() 
    dialog.withdraw() 
    fname = tkFileDialog.askopenfilename(filetypes = (("Image Files", "*.JPG"), ("All files", "*"))) 
    dialog.destroy() 
    img = ImageTk.PhotoImage(Image.open(fname).convert('LA')) 
    panel.configure(image = img) 



menubar = Menu(root) 

# File Menu 
filemenu = Menu(menubar, tearoff=0) 
filemenu.add_command(label="Open", command=Open) 
menubar.add_cascade(label="File", menu=filemenu) 


# display the menu 
root.config(menu=menubar) 
root.mainloop() 

Hilfe oder Vorschläge zur Behebung des Problems?

Vielen Dank im Voraus.

+0

Gibt es einen Fehler in der Konsole? –

Antwort

0

Es sieht aus wie jemand auf SO dieses Problem hatte vor: How to update the image of a Tkinter Label widget?

Es läuft darauf hinaus, Tkintergarbage collection auf dem Bild zu tun, so dass es außerhalb des Gültigkeitsbereiches ist. Sie möchten panel.image = img unter Ihrer panel.configure(...) Zeile hinzufügen.

0

nach der vorgeschlagenen Änderung von @ Nicholas-Smith mein Code funktioniert gut. hier ist die aktualisierte und Arbeits Code für Python 2,7

def Open():  ## function to open file dialog and select the file to use in the reader application 
    dialog = Tk() 
    dialog.withdraw() 
    fname = tkFileDialog.askopenfilename(filetypes = (("Image Files", "*.JPG"), ("All files", "*"))) 
    dialog.destroy() 
    img2 = ImageTk.PhotoImage(Image.open(fname).convert('LA')) 
    panel.configure(image = img2) 
    panel.image = img2 

nur „open“ -Funktion modifiziert werden soll müssen.