Python canvas move ve rotate yi bir arada yapmak

Bu arada aşağıda kullandığım kodu bir üstte kullandığım koda tercih ederim.

Yaptığım değişiklikler şunlar:

  1. 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.
  2. 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()
1 Beğeni