You should learn about classes and methods.
The problem you where having is, you kept referencing the Label class to keep track of all images.
Each image should be kept with it's respected widget. The Label doesn't care about the buttons in the root frame, and can't have children inheritances.
In the working code below, really study how I have it set up. The code is a bit different, with proper variable names and structure. Remember to keep things together as much as you can, and load anything intensive at the beginning of the code, like images/video/large files/etc...
from Tkinter import *
class app:
def __init__(self, master):
#create the root window
frame = Frame(master)
frame.pack()
#load images into memory
logo = PhotoImage(file="logo.gif")
quit = PhotoImage(file="quitbut.gif")
hello = PhotoImage(file="hellobut.gif")
#set up label
logoLabel = Label(frame, image=logo)
logoLabel.image = logo #****
logoLabel.pack()
#set up buttons
exitButton = Button(frame, image=quit, fg="red", command=frame.quit)
exitButton.image = quit #****
exitButton.pack(side=LEFT)
helloButton = Button(frame, image=hello, command=self.say_high)
helloButton.image = hello #****
helloButton.pack(side=LEFT)
def say_high(self):
print "Hello world!"
root = Tk()
myApp = app(root)
root.mainloop()
The commented lines with #****, in Tk you need a reference from the class that's using it, so it can store it in cache so the garbage collector doesn't erase what's in memory.
And this is only one way to skin the cat.