Henry Finucane wrote:
> While attempting to add images to a canvas programmatically, I wrote
> the following:
> for i in os.listdir('./icons/terrain'):
>       self.terrainScreen["height"] = str(int(self.terrainScreen["height"])+50)
>       debug(self.terrainScreen["height"]+" height of terrainScreen",5)
>       img = PhotoImage(file='./icons/terrain/'+i)
>       
> self.terrainScreen.create_image(int(self.terrainScreen["height"])-50,(int(self.terrainScreen["height"])-50),
> image=img,tag=None)
> 
> I couldn't figure out why it didn't work, until I went in and played
> with Tkinter in the python shell, and I came to the conclusion that
> the reason nothing was displayed on the canvas was that images are
> passed by reference. In other words, unless there is a permanent `img'
> variable, the data disappears.

For some reason Tkinter doesn't keep a reference to the image you pass 
it. So when your reference goes out of scope, the image is 
garbage-collected and can no longer be displayed. The solution, as you 
have found, is to keep a reference to the image somewhere. It can be in 
a variable, or you could make a list of images.

Kent

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to