 <p>When you add a <code>PhotoImage</code> or other Image object to a Tkinter widget, you must keep your own reference to the image object. If you don’t, the image won’t always show up. Here is essentially what I'm trying to say:</p> <pre><code>def displayLabel(): photoimage = ImageTk.PhotoImage(file="lena.png") canvas.create_image(0,0, image=photoimage, anchor = NW) canvas.image=photoimage #keep the reference! </code></pre> <p>I learned it from <a href="http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm" rel="nofollow">here</a>.</p> <p><strong>Also</strong> you need to remove the parenthesis <code>()</code> </p> <pre><code>b3 = Button(tk, text="Display Label", width=30, command= displayLabel) #no parenthesis </code></pre> <p>otherwise it will be called directly without even the button press. You might not have noticed it up until now since <code>Tk</code> was just making the image blank as you may understand now from the link.</p> <p><strong>Also</strong> if you want to send some arguments to <code>displayLabel</code> you need to use <code>lambda</code>. For eg:</p> <pre><code>b3 = Button(tk, text="Display Label", width=30, command= lambda:displayLabel(args)) </code></pre> <p>In your asked question,you were missing the colon <code>:</code></p>