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?
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.Restart the Kernel to get rid of the error "TclError: image "pyimage9" doesn't exist"
This problem happens when we attempt to run the above code in Ipython. And it can be solved by changing the line
The general way which I use to display an image in tkinter is:
In the above case it works but you have something like:
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 setfilename
to 'AP_icon.gif', so you would think that you get a different error as I dont know wherepyimage9
comes from. This makes me think that maybe you are getting the file name incorrect somewhere? You also need to moveroot = tk.Tk()
to the top under imports.Try the following code as I am able to rectify the same error: