Q:

Putting gif image in tkinter window

I'm trying to insert a gif image in a new tkinter window when a button is clicked but I keep getting this error
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\idlelib\run.py", line 119, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\queue.py", line 172, in get
raise Empty
queue. Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1549, in __call__
return self.func(*args)
File "C:/Users/Afro/Desktop/mff.py", line 8, in sex
canvas = tkinter. Label(wind,image = photo)
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 2605, in __init__
Widget.__init__(self, master, 'label', cnf, kw)
File "C:\Users\Afro\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 2138, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter. TclError: image "pyimage1" doesn't exist

Here's the code.  The image and the location actually exists. 
import tkinter

def six():
    wind = tkinter. Tk()
    photo = tkinter. PhotoImage(file = 'American-Crime-Story-1.gif')
    self = photo
    canvas = tkinter. Label(wind,image = photo)
    canvas.grid(row = 0, column = 0)

def base():
    ssw = tkinter. Tk()
    la = tkinter. Button(ssw,text = 'yes',command=six)
    la.grid()
base()

What am I doing wrong? 

A:

You are trying to create two instances of Tk window.  You can't do that.  If you want second window or pop-up window you should use Toplevel() widget. 
Also, self doesn't mean anything in this context.  Using the widget's image property would be better to keep a reference. 
import tkinter

ssw = tkinter. Tk()

def six():
    toplvl = tkinter. Toplevel() #created Toplevel widger
    photo = tkinter. PhotoImage(file = 'American-Crime-Story-1.gif')
    lbl = tkinter. Label(toplvl ,image = photo)
    lbl.image = photo #keeping a reference in this line
    lbl.grid(row=0, column=0)

def base():
    la = tkinter. Button(ssw,text = 'yes',command=six)
    la.grid(row=0, column=0) #specifying row and column values is much better

base()

ssw.mainloop()

