В ошибку ткнуть не могу.
Их слишком много. Пришлось написать самому за Вас. Так как с ООП Вы не очень дружны, то я написал с использованием ненавистных мне global.
Держите
import tkinter
from PIL import ImageTk, Image
#
angle = 0
#
def push(event, img):
global image
global angle
global image_
angle += 10
canvas.delete(img)
image_ = ImageTk.PhotoImage(image.rotate(angle, expand=True))
img = canvas.create_image(100, 100, image=image_, anchor="center")
root.update()
#
root = tkinter.Tk()
root.geometry("400x400+100+100")
#
image = Image.open('image.png')
image = image.convert("RGBA")
image_ = ImageTk.PhotoImage(image)
#
canvas = tkinter.Canvas(root, width=200, height=200)
canvas.place(relx=0.5, rely=0.5, anchor="center")
img = canvas.create_image(100, 100, image=image_, anchor="center")
#
but = tkinter.Button(root, text="rotate")
but.bind("<Button-1>", lambda event: push(event, img))
but.place(relx=0.5, rely=0.9, anchor="center")
#
root.mainloop()
Еще рекомендую почитать на досуге
ЭТО!!!, чтобы не писать from tkinter import* никогда.
P.S. Будут вопросы - пишите…