问题
I am trying to display an image to a tkinter GUI using tkinter.Label() widget. The procedure seems simple and straightforward, but this code doesn't work!
code:
import Tkinter as tk
import Image, ImageTk, sys
filename = 'AP_icon.gif'
im = Image.open(filename) # Image is loaded, because the im.show() works
tkim = ImageTk.PhotoImage(im)
root = tk.Tk()
label = tk.Label(root, image = tkim) # Here is the core problem (see text for explanation)
label.image = tkim # This is where we should keep the reference, right?
label.grid (row = 0, column = 0)
tk.Button(root, text = 'quit', command = lambda: sys.exit()).grid(row = 1, column = 1)
root.mainloop()
When we execute this code, it doesn't compile, giving an error:
TclError: image "pyimage9" doesn't exist
When I define label
without its parent root
, No compilation error occurs, but the GUI does not display any image!
Can anyone identify what could be the issue?
回答1:
This problem happens when we attempt to run the above code in Ipython. And it can be solved by changing the line
root = tk.Tk() to
root = tk.Toplevel()
回答2:
You need to create the root widget before you call any other tkinter functions. Move the creation of root
to be before the creation of the image.
回答3:
The general way which I use to display an image in tkinter is:
import Tkinter as tk
root = tk.Tk()
image1 = tk.PhotoImage(file = 'name of image.gif')
# If image is stored in the same place as the python code file,
# otherwise you can have the directory of the image file.
label = tk.Label(image = image1)
label.image = image1 # yes can keep a reference - good!
label.pack()
root.mainloop()
In the above case it works but you have something like:
import Tkinter as tk
image = tk.PhotoImage(file = 'DreamPizzas.gif') #here this is before root = tk.Tk()
root = tk.Tk()
# If image is stored in the same place as the python code file,
# otherwise you can have the directory of the image file.
label = tk.Label(image = image)
label.image = image
label.pack()
root.mainloop()
this gives me a runtime error: too early to create image.
but you have said that your error is image pyimage9
doesn't exist, this is strange because at the top you have set filename
to 'AP_icon.gif', so you would think that you get a different error as I dont know where pyimage9
comes from. This makes me think that maybe you are getting the file name incorrect somewhere? You also need to move root = tk.Tk()
to the top under imports.
回答4:
Try the following code as I am able to rectify the same error:
window=Tk()
c=Canvas(window,height=2000,width=2000)
p=PhotoImage(file='flower1.gif',master = c)
c.create_image(500,500,image=p)
来源:https://stackoverflow.com/questions/25460418/cannot-associate-image-to-tkinter-label