On 5/21/2016 12:54 PM, Peter Otten wrote:
sweating_...@yahoo.com wrote:

I am working on an image project, and I can display my image in main(). I
mean, I can load my image in my main(). Needless, it is awkward. I am trying
to load my image with a function, but got an empty image window popped up,
no image content loaded. Please take a look at code:



rom Tkinter import *

def load_img(win):
        img = PhotoImage(file="xxx.gif")
        Label(win, image=img).pack()

win = Tk()
load_img(win)
win.mainloop()

Somebody can help me out? Thanks!

It's not your fault, there's an odd quirk in the library: you have to keep a
reference of the PhotoImage instance around to prevent the image from being
garbage-collected. For example

from Tkinter import *

def load_img(win):
    global img

    img = PhotoImage(file="xxx.gif")
    Label(win, image=img).pack()

win = Tk()
load_img(win)
win.mainloop()

will work because img is now a global that is not deleted until the script
ends (but don't run the function twice -- then the first image will
disappear).

The usual procedure is to create an App class and make images attributes of the App instance. Then load_img would be a method and the first line would be 'self.img = ...'. One can also have a list of images, to use in a slide show, or a dict of images, so users can select.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to