cannot associate image to tkinter label

2020-02-01 18:38发布

问题:

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:

Restart the Kernel to get rid of the error "TclError: image "pyimage9" doesn't exist"



回答5:

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)