w3resource

Creating a bouncing ball animation with Python and Tkinter


Write a Python program that uses the Canvas widget to create a simple animation, such as a bouncing ball using Tkinter.

Sample Solution:

Python Code:

import tkinter as tk

# Constants for the canvas size
CANVAS_WIDTH = 300
CANVAS_HEIGHT = 300

# Ball properties
BALL_RADIUS = 15
BALL_COLOR = "blue"
BALL_SPEED_X = 2
BALL_SPEED_Y = 2

class BouncingBallApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Bouncing Ball")

        self.canvas = tk.Canvas(root, width=CANVAS_WIDTH, height=CANVAS_HEIGHT, bg="white")
        self.canvas.pack()

        # Create the bouncing ball
        self.ball = self.canvas.create_oval(
            CANVAS_WIDTH // 2 - BALL_RADIUS,
            CANVAS_HEIGHT // 2 - BALL_RADIUS,
            CANVAS_WIDTH // 2 + BALL_RADIUS,
            CANVAS_HEIGHT // 2 + BALL_RADIUS,
            fill=BALL_COLOR
        )

        # Initial ball position and direction
        self.ball_x, self.ball_y = CANVAS_WIDTH // 2, CANVAS_HEIGHT // 2
        self.speed_x, self.speed_y = BALL_SPEED_X, BALL_SPEED_Y

        # Start the animation
        self.animate()

    def animate(self):
        # Move the ball
        self.ball_x += self.speed_x
        self.ball_y += self.speed_y

        # Check for collisions with the canvas boundaries
        if self.ball_x + BALL_RADIUS >= CANVAS_WIDTH or self.ball_x - BALL_RADIUS <= 0:
            self.speed_x *= -1
        if self.ball_y + BALL_RADIUS >= CANVAS_HEIGHT or self.ball_y - BALL_RADIUS <= 0:
            self.speed_y *= -1

        # Update the ball's position
        self.canvas.move(self.ball, self.speed_x, self.speed_y)

        # Schedule the next animation frame
        self.root.after(10, self.animate)

if __name__ == "__main__":
    root = tk.Tk()
    app = BouncingBallApp(root)
    root.mainloop()

Explanation:

In the exercise above -

  • Create a Tkinter canvas and draw a red bouncing ball on it.
  • The ball moves within the canvas, bouncing off the boundaries.
  • The animation is achieved by repeatedly updating the ball's position and direction using the animate method and the after method to schedule the next frame.

Output:

Tkinter: Creating a bouncing ball animation with Python and Tkinter. Part-1

Flowchart:

Flowchart: Creating a bouncing ball animation with Python and Tkinter.
Flowchart: Creating a bouncing ball animation with Python and Tkinter.

Python Code Editor:


Previous: Building a whiteboard application with Python and Tkinter.
Next: Creating a versatile drawing program with Python and tkinter.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.