import tkinter as tk
import math
# Configuration
WIDTH, HEIGHT = 800, 300
RADIUS = 40
SPOKES = 30
SPEED = 5
ANGLE_STEP = 0.1 # Rotation speed
class Wheel:
def __init__(self, canvas, x, y, radius, spokes):
self.canvas = canvas
self.x, self.y = x, y
self.radius = radius
self.spokes = spokes
self.angle = 0
# Create rim
self.rim = canvas.create_oval(x-radius, y-radius, x+radius, y+radius, width=2)
# Create spokes (initially empty, updated in draw_spokes)
self.spoke_lines = []
for _ in range(spokes):
self.spoke_lines.append(canvas.create_line(0,0,0,0))
self.draw_spokes()
def draw_spokes(self):
# Remove old spokes
for line in self.spoke_lines:
self.canvas.delete(line)
self.spoke_lines = []
# Draw new spokes
for i in range(self.spokes):
ang = self.angle + (i * 2 * math.pi / self.spokes)
x1 = self.x + self.radius * math.cos(ang)
y1 = self.y + self.radius * math.sin(ang)
self.spoke_lines.append(self.canvas.create_line(self.x, self.y, x1, y1, width=1))
def move(self):
self.x += SPEED
self.angle += ANGLE_STEP
# Reset if off screen
if self.x > WIDTH + self.radius:
self.x = -self.radius
# Update rim position
self.canvas.coords(self.rim, self.x-self.radius, self.y-self.radius,
self.x+self.radius, self.y+self.radius)
self.draw_spokes()
def animate():
wheel.move()
root.after(20, animate)
# Setup Tkinter
root = tk.Tk()
root.title("Rolling Wheel")
canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT, bg="white")
canvas.pack()
# Initialize Wheel
wheel = Wheel(canvas, 50, HEIGHT - 100, RADIUS, SPOKES)
# Start Animation
animate()
root.mainloop()

Tidak ada komentar:
Posting Komentar