Tkinter, image not appearing in function but without function

7stud bbxx789_05ss at yahoo.com
Sun Apr 13 21:19:28 EDT 2008


On Apr 13, 11:12 am, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
> On Sun, 13 Apr 2008 08:57:29 -0700, skanemupp wrote:
> > why is the first program not working? when i click the screen the map
> > is not appearing.
>
> > the second program works.
>
> > from Tkinter import *
>
> > master = Tk()
>
> > w = Canvas(master, width=700, height=600)
> > w.pack(expand = YES, fill = BOTH)
>
> > def mapper():
> >     mapq = PhotoImage(file = 'C:\Users\saftarn\Desktop\world-map.gif')
> >     w.create_image(10, 10, image = mapq, anchor = NW)
>
> > def key(event):
> >     print "pressed", repr(event.char)
>
> > def callback(event):
> >     w.focus_set()
> >     print "clicked at", event.x, event.y
> >     mapper()
> >     print 'yo'
> >     square = w.create_oval(event.x-5,event.y-5,event.x+5,event.y+5,
> > fill="black")
>
> > w.bind("<Key>", key)
> > w.bind("<Button-1>", callback)
> > w.pack()
>
> > mainloop()
>
> Python doesn't know that the Tk side still needs the image and frees the
> memory when `mapper()` is done and `mapq` the only name to the `PhotoImage`
> instance goes out of scope.
>
> Ciao,
>         Marc 'BlackJack' Rintsch


...so you should do something like this(untested):


def mapper(height, width, widget, img, position):
   widget.create_image(height, width, image=img, anchor=position)

w = Canvas(master, width=700, height=600)
w.pack(expand = YES, fill = BOTH)

#Create a permanent reference to the image, i.e. the variable is not
#created inside a function:
my_img = PhotoImage(file = 'C:\Users\saftarn\Desktop\world-map.gif')

mapper(10, 10, w, my_img, NW)



More information about the Python-list mailing list