From 2123ec6dfe9ad82482d65dbaaea3e91edc3efb4e Mon Sep 17 00:00:00 2001 From: ThisBirchWood Date: Thu, 20 Mar 2025 20:23:28 +0100 Subject: [PATCH] ADD: button widget --- assets/pause-button.png | Bin 0 -> 10406 bytes assets/play-button.png | Bin 0 -> 9645 bytes widgets/button.py | 60 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 assets/pause-button.png create mode 100644 assets/play-button.png create mode 100644 widgets/button.py diff --git a/assets/pause-button.png b/assets/pause-button.png new file mode 100644 index 0000000000000000000000000000000000000000..3c877cc4ee6711d85c7b3ce802c4f80a5c79dc9a GIT binary patch literal 10406 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 literal 0 HcmV?d00001 diff --git a/assets/play-button.png b/assets/play-button.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0c499c38e0a9e82ba3b2264f82a4e0cd17e220 GIT binary patch literal 9645 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 literal 0 HcmV?d00001 diff --git a/widgets/button.py b/widgets/button.py new file mode 100644 index 0000000..40f914a --- /dev/null +++ b/widgets/button.py @@ -0,0 +1,60 @@ +import pygame + +class Button: + def __init__(self, screen, x, y, width, height, image_path, colour, action): + self.screen = screen + self.x = x + self.y = y + self.width = width + self.height = height + self._load_image(image_path) + self.colour = colour + self.action = action + + self.active = False + + def _load_image(self, image_path): + self.image = pygame.image.load(image_path) + self.image = pygame.transform.scale(self.image, (self.width, self.height)) + + def handle_event(self, event): + if event.type == pygame.MOUSEBUTTONDOWN: + if self.x <= event.pos[0] <= self.x + self.width and self.y <= event.pos[1] <= self.y + self.height: + self.active = not self.active + self.action() + + def draw(self): + pygame.draw.rect(self.screen, self.colour, (self.x, self.y, self.width, self.height)) + self.screen.blit(self.image, (self.x, self.y)) + + def set_image(self, image_path: str): + self._load_image(image_path) + + def set_action(self, action): + self.action = action + +if __name__ == "__main__": + pygame.init() + screen = pygame.display.set_mode((700, 700)) + + def play_pause(button): + if button.active: + button.set_image("../assets/pause-button.png") + else: + button.set_image("../assets/play-button.png") + + + button = Button(screen, 100, 100, 100, 100, "../assets/play-button.png", (255, 0, 0), lambda: play_pause(button)) + + running = True + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + button.handle_event(event) + + screen.fill((0, 0, 0)) + button.draw() + pygame.display.flip() + + pygame.quit() \ No newline at end of file