from itertools import count
from PIL import Image, ImageTk


def load_gif(gif_file):
    """Load GIF frames from the specified file."""
    frames = []
    try:
        with Image.open(gif_file) as img:
            for frame in count(1):
                frames.append(ImageTk.PhotoImage(img.copy()))
                img.seek(frame)
    except EOFError:
        pass
    return frames


def show_animation(label, frames):
    """Display the animation on the specified label."""
    def update_frame(frame_index):
        if not getattr(label, 'stop_animation', False):
            label.configure(image=frames[frame_index])
            label.after(100, update_frame, (frame_index + 1) % len(frames))
    update_frame(0)


def stop_animation(label):
    """Stop the animation."""
    label.stop_animation = True