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:
Posting Komentar