Rabu, 22 April 2026

Python - Animation Wheels WIth Text 1

 



import tkinter as tk

import math


# --- Configuration ---

WINDOW_WIDTH = 800

WINDOW_HEIGHT = 400

WHEEL_RADIUS = 30

SPOKES = 4

SPEED = 3  # pixels per frame

ROTATION_SPEED = 5  # degrees per frame


class MovingCar:

    def __init__(self, canvas):

        self.canvas = canvas

        self.angle = 0

        self.x = 50

        self.y = 250


        # Create wheels

        self.left_wheel = self.canvas.create_oval(

            self.x, self.y,

            self.x + WHEEL_RADIUS * 2, self.y + WHEEL_RADIUS * 2,

            outline="black", width=2

        )

        self.right_wheel = self.canvas.create_oval(

            self.x + 120, self.y,

            self.x + 120 + WHEEL_RADIUS * 2, self.y + WHEEL_RADIUS * 2,

            outline="black", width=2

        )


        # Create spokes for each wheel

        self.left_spokes = []

        self.right_spokes = []

        for _ in range(SPOKES):

            self.left_spokes.append(self.canvas.create_line(0, 0, 0, 0, fill="black", width=2))

            self.right_spokes.append(self.canvas.create_line(0, 0, 0, 0, fill="black", width=2))


        # Create rectangle body

        self.body = self.canvas.create_rectangle(

            self.x - 10, self.y - 50,

            self.x + 160, self.y,

            fill="brown"

        )


        # Create text

        self.text = self.canvas.create_text(

            self.x + 75, self.y - 25,

            text="hello", fill="white", font=("Arial", 14, "bold")

        )


    def update_spokes(self, wheel_center_x, wheel_center_y, spokes_list):

        """Update spoke positions based on current rotation angle."""

        for i, spoke in enumerate(spokes_list):

            angle_deg = self.angle + (360 / SPOKES) * i

            rad = math.radians(angle_deg)

            x_end = wheel_center_x + WHEEL_RADIUS * math.cos(rad)

            y_end = wheel_center_y + WHEEL_RADIUS * math.sin(rad)

            self.canvas.coords(spoke, wheel_center_x, wheel_center_y, x_end, y_end)


    def move(self):

        # Move all parts to the right

        self.canvas.move(self.left_wheel, SPEED, 0)

        self.canvas.move(self.right_wheel, SPEED, 0)

        self.canvas.move(self.body, SPEED, 0)

        self.canvas.move(self.text, SPEED, 0)

        for spoke in self.left_spokes + self.right_spokes:

            self.canvas.move(spoke, SPEED, 0)


        # Update rotation

        self.angle = (self.angle + ROTATION_SPEED) % 360


        # Get wheel centers

        lx1, ly1, lx2, ly2 = self.canvas.coords(self.left_wheel)

        rx1, ry1, rx2, ry2 = self.canvas.coords(self.right_wheel)

        left_center = ((lx1 + lx2) / 2, (ly1 + ly2) / 2)

        right_center = ((rx1 + rx2) / 2, (ry1 + ry2) / 2)


        # Update spokes

        self.update_spokes(*left_center, self.left_spokes)

        self.update_spokes(*right_center, self.right_spokes)


        # Loop animation

        if lx1 < WINDOW_WIDTH:

            self.canvas.after(30, self.move)


# --- Main Program ---

root = tk.Tk()

root.title("Rotating Wheels Animation")


canvas = tk.Canvas(root, width=WINDOW_WIDTH, height=WINDOW_HEIGHT, bg="skyblue")

canvas.pack()


car = MovingCar(canvas)

car.move()


root.mainloop()

Tidak ada komentar: