Sabtu, 11 April 2026

Python Animation Box with Text inside, Button Click to Start and Moving forward

 


import tkinter as tk
import math

class AnimatedVehicle:
    def __init__(self, root):
        self.root = root
        self.canvas = tk.Canvas(root, width=600, height=300, bg='white')
        self.canvas.pack()

        # Vehicle parameters
        self.x, self.y = 50, 150
        self.wheel_radius = 20
        self.spokes = 10
        self.angle = 0
        self.speed = 5
        self.running = False

        # Draw Vehicle Structure
        self.body = self.canvas.create_rectangle(0, 0, 0, 0, fill='brown')
        self.text = self.canvas.create_text(0, 0, text="Hello", fill='white', font=('Arial', 12))
        self.wheel1 = self.canvas.create_oval(0, 0, 0, 0, outline='black', width=2)
        self.wheel2 = self.canvas.create_oval(0, 0, 0, 0, outline='black', width=2)
        self.spoke_lines = [self.canvas.create_line(0,0,0,0) for _ in range(self.spokes * 2)]
        
        # Initial position
        self.update_vehicle(self.x, self.y)

        # Button
        self.button = tk.Button(root, text="Start", command=self.start_animation)
        self.button.pack()

    def update_vehicle(self, x, y):
        # Update Body
        self.canvas.coords(self.body, x, y - 30, x + 100, y + 10)
        self.canvas.coords(self.text, x + 50, y - 10)
        
        # Update Wheels
        self.canvas.coords(self.wheel1, x + 10, y, x + 10 + 2*self.wheel_radius, y + 2*self.wheel_radius)
        self.canvas.coords(self.wheel2, x + 70, y, x + 70 + 2*self.wheel_radius, y + 2*self.wheel_radius)
        
        # Update Spokes
        for i in range(self.spokes):
            angle = self.angle + i * (360 / self.spokes)
            rad = math.radians(angle)
            
            # Wheel 1 spokes
            self.canvas.coords(self.spoke_lines[i*2], 
                               x + 10 + self.wheel_radius, y + self.wheel_radius,
                               x + 10 + self.wheel_radius + self.wheel_radius * math.cos(rad),
                               y + self.wheel_radius + self.wheel_radius * math.sin(rad))
            # Wheel 2 spokes
            self.canvas.coords(self.spoke_lines[i*2+1], 
                               x + 70 + self.wheel_radius, y + self.wheel_radius,
                               x + 70 + self.wheel_radius + self.wheel_radius * math.cos(rad),
                               y + self.wheel_radius + self.wheel_radius * math.sin(rad))

    def start_animation(self):
        if not self.running:
            self.running = True
            self.button.config(state=tk.DISABLED)
            self.animate()

    def animate(self):
        if self.x > 600:
            self.x = -100
        
        self.x += self.speed
        self.angle += 10 # Rotation speed
        self.update_vehicle(self.x, self.y)
        
        self.root.after(50, self.animate)

root = tk.Tk()
root.title("Moving Vehicle")
app = AnimatedVehicle(root)
root.mainloop()


Tidak ada komentar: