Bu arada aşağıda kullandığım kodu bir üstte kullandığım koda tercih ederim.
Yaptığım değişiklikler şunlar:
- Döndürme işlemi bir önceki döndürülen nesne üzerinde gerçekleşiyordu. Yani bir resmi döndürünce, bir sonraki dönme hareketi bu yeni konuma göre yapılıyordu, bu da resmin bozulmasına neden oluyordu. Bunu iptal ettim, döndürme işlemi, resmin orijinal hali üzerinden gerçekleşecek, böylece resimde bozulmalar meydana gelmeyecek.
- Dönme açısını, birim zamanda x ve y eksenleri üzerinde yapılacak doğrusal hareket miktarını, koordinatları ve zamanı parametre olarak girebilirsiniz.
import tkinter as tk
from PIL import Image, ImageTk
class Object:
def __init__(
self,
master,
img,
coordinates,
rotation_angle,
x_distance,
y_distance,
time
):
self.master = master
self.img = img
self._img = img
self.rotation_angle = rotation_angle
self.x_distance = x_distance
self.y_distance = y_distance
self.time = time
self.start_angle = 0
self.image = ImageTk.PhotoImage(self.img)
self.master.images += [self.image]
self.status = False
self.master.create_image(
coordinates,
image=self.image,
tag="resim"
)
self.master.bind(
"<ButtonPress-1>",
lambda event: self.start()
)
self.master.bind(
"<ButtonRelease-1>",
lambda event: self.stop()
)
def start(self):
self.status = True
self.rotate()
def stop(self):
self.status = False
def rotate(self):
if self.status:
self.img = self._img.rotate(self.start_angle)
self.image = ImageTk.PhotoImage(self.img)
self.master.itemconfig(tagOrId="resim", image=self.image)
self.master.move("resim", self.x_distance, self.y_distance)
self.start_angle += self.rotation_angle
self.master.after(self.time, self.rotate)
def main():
root = tk.Tk()
canvas = tk.Canvas(master=root)
canvas.pack()
canvas.images = []
img = Image.open("test.png")
Object(
master=canvas,
img=img,
rotation_angle=10,
x_distance=1,
y_distance=0,
time=10,
coordinates=(50, 50)
)
root.mainloop()
if __name__ == "__main__":
main()