> While attempting to add images to a canvas programmatically, I wrote > the following: > for i in os.listdir('./icons/terrain'): > ... img = PhotoImage(file='./icons/terrain/'+i) > self.terrainScreen.create_image(int(self.terrainScreen["height"])-50, > > (int(self.terrainScreen["height"])-50), > image=img,tag=None)
> 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. Everything in Python is passed by reference. The issue here is that one the reference goes out of scope the image object gets garbage collected! > In other words, unless there is a permanent `img' variable, the data > disappears. >For example (replace w\ your own gifs): >>> from Tkinter import * >>> root = Tk() >>> terrain = Canvas(root,width=50,height=50) >>> img = PhotoImage(file='MapEditor/icons/terrain/desert.gif') >>> terrain.create_image(0,0,image=img) >Works beautifully, eh? >>> img = PhotoImage(file='MapEditor/icons/terrain/water.gif') > Doh! Now it disappears! You've crated a new image object but you need to pass that to the canvas, or more easily... Try configuring the file property of the image: img.configure(file='MapEditor/icons/terrain/water.gif') That changes the file used by the image object that is being displayed. The image object is a placeholder within your GUI for displaying graphics. You only need one object because you are onmly displaying one image (at a time) in the GUI. HTH, Alan Gauld Author of the Learn to Program web site http://www.freenetpages.co.uk/hp/alan.gauld _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor