Advertisement
Windspar

Simple Pygame Sprite Button

May 30th, 2019
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.43 KB | None | 0 0
  1. import pygame
  2. from pygame.sprite import Sprite
  3.  
  4. class Button(Sprite):
  5.     def __init__(self, caption, font, rect, callback,
  6.             text_color=pygame.Color('white'),
  7.             button_color=pygame.Color('slateblue'),
  8.             hover_color=pygame.Color('dodgerblue')):
  9.  
  10.         Sprite.__init__(self)
  11.         self.rect = rect
  12.         self.hover = False
  13.         self.callback = callback
  14.  
  15.         # Build are text and center it
  16.         image_caption = font.render(caption, 1, text_color)
  17.         image_rect = image_caption.get_rect()
  18.         image_rect.center = pygame.Vector2(rect.center) - rect.topleft
  19.  
  20.         # Build are normal image
  21.         self.image_normal = pygame.Surface(rect.size)
  22.         self.image_normal.fill(button_color)
  23.         self.image_normal.blit(image_caption, image_rect)
  24.  
  25.         # Build are hover image
  26.         self.image_hover =  pygame.Surface(rect.size)
  27.         self.image_hover.fill(hover_color)
  28.         self.image_hover.blit(image_caption, image_rect)
  29.  
  30.     # Override image to control the draw method
  31.     @property
  32.     def image(self):
  33.         if self.hover:
  34.             return self.image_hover
  35.         else:
  36.             return self.image_normal
  37.  
  38.     def on_mousemotion(self, event):
  39.         self.hover = self.rect.collidepoint(event.pos)
  40.  
  41.     def on_clicked(self, event):
  42.         if event.button == 1:
  43.             if self.rect.collidepoint(event.pos):
  44.                 self.callback(self)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement