At first I implemented this code which uses classes and worked fine:
from Tkinter import *
import numpy as np
from PIL import Image,ImageTk
import time
#----------------------------------------------------------------------
class MainWindow():
    #----------------
    def __init__(self,main,pix):
        # canvas for image
        self.canvas = Canvas(main, width=424, height=424)
        self.canvas.grid(row=0, column=0)
        # images
        self.im=Image.fromarray(pix.astype('uint8'))
        self.photo = ImageTk.PhotoImage(image=self.im)
        self.my_images = self.photo
        self.my_image_number = 0
        # set first image on canvas
        self.image_on_canvas = self.canvas.create_image(0, 0, anchor = NW, image = self.my_images )
        self.i=0
        self.j=0
        main.after(1,self.onButton,main,pix)# button to change image
        main.update()
    #----------------
    def onButton(self,main,pix):
        print self.i,self.j
        if self.j==100:
            return
        pix[self.i][self.j]=255-pix[self.i][self.j]
        self.i+=1
        if self.i==100:
            self.i=0
            self.j+=1
        self.im=Image.fromarray(pix.astype('uint8'))
        self.photo = ImageTk.PhotoImage(image=self.im)
        self.my_images = self.photo
        self.canvas.itemconfig(self.image_on_canvas, image = self.my_images)
        main.after(1,self.onButton,main,pix)
    else:
        main.after(0,self.onButton,main,pix)
#----------------------------------------------------------------------
root = Tk()
pix=np.array([[(i,j,255) for i in range(256)] for j in range(255,-1,-1)])
x=MainWindow(root,pix)
root.mainloop()
Later I tried to use the same functions without the class and it looks like this:
from Tkinter import *
import numpy as np
from PIL import Image,ImageTk
import time
def onButton(main,pix):
        global i,j
        if j==100:
            return
        pix[i][j]=255-pix[i][j]
        i+=1
        if i==100:
            i=0
            j+=1
        im=Image.fromarray(pix.astype('uint8'))
        photo = ImageTk.PhotoImage(image=im)
        my_images = photo
        canvas.itemconfig(image_on_canvas, image = my_images)
        main.after(1,onButton,main,pix)
    else:
        main.after(0,onButton,main,pix)
root = Tk()
pix=np.array([[(i,j,255) for i in range(256)] for j in range(255,-1,-1)])
canvas = Canvas(root, width=424, height=424)
canvas.grid(row=0, column=0)
im=Image.fromarray(pix.astype('uint8'))
photo = ImageTk.PhotoImage(image=im)
image_on_canvas = canvas.create_image(0, 0, anchor = NW, image = photo )
i,j=0,0
root.after(1,onButton,root,pix)# button to change image
print "hi"
root.mainloop(f i==100:
            i=0
            j+=1
        im=Image.fromarray(pix.astype('uint8'))
        photo = ImageTk.PhotoImage(image=im)
        my_images = photo
        canvas.itemconfig(image_on_canvas, image = my_images)
        main.after(1,onButton,main,pix)
    else:
        main.after(0,onButton,main,pix)
root = Tk()
pix=np.array([[(i,j,255) for i in range(256)] for j in range(255,-1,-1)])
canvas = Canvas(root, width=424, height=424)
canvas.grid(row=0, column=0)
im=Image.fromarray(pix.astype('uint8'))
photo = ImageTk.PhotoImage(image=im)
image_on_canvas = canvas.create_image(0, 0, anchor = NW, image = photo )
i,j=0,0
root.after(1,onButton,root,pix)# button to change image
print "hi"
root.mainloop()
Why does this not work? This is the first time I am working with tkinter, so I am probably missing something crucial. What do I need to change?
 
     
    