code: def handleEvent(self, eventObj):
          
  
          if eventObj.type not in (MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN) or not self.visible:
              # The checkBox only cares bout mouse-related events (or no events, if it is invisible)
              return False
  
          if not self.isEnabled:
              return False
  
          clicked = False
  
          if (not self.mouseOverButton) and self.rect.collidepoint(eventObj.pos):
              # if mouse has entered the checkBox:
              self.mouseOverButton = True
  
  
          elif self.mouseOverButton and (not self.rect.collidepoint(eventObj.pos)):
              # if mouse has exited the checkBox:
              self.mouseOverButton = False
  
          if self.rect.collidepoint(eventObj.pos):
  
              if eventObj.type == MOUSEBUTTONDOWN:
                  self.buttonDown = True
                  self.lastMouseDownOverButton = True
  
          else:
              if eventObj.type in (MOUSEBUTTONUP, MOUSEBUTTONDOWN):
                  # if an up/down happens off the checkBox, then the next up won't cause mouseClick()
                  self.lastMouseDownOverButton = False
  
          if eventObj.type == MOUSEBUTTONDOWN:
              self.mouseIsDown = True
              
          # mouse up is handled whether or not it was over the checkBox
          doMouseClick = False
          if eventObj.type == MOUSEBUTTONUP:
              self.mouseIsDown = False
              if self.lastMouseDownOverButton:
                  doMouseClick = True
              self.lastMouseDownOverButton = False
  
              if self.buttonDown:
                  self.buttonDown = False
  
              if doMouseClick:
                  self.buttonDown = False
                  clicked = True
                  
                  if self.playSoundOnClick:
                      self.soundOnClick.play()
  
                  # switch state:
                  self.value = not self.value
  
          return clicked
docs: This method should be called every time through the main loop.
  
          It handles showing the up, over, and down states of the button.
  
          Parameters:
              | eventObj - the event object obtained by calling pygame.event.get()
  
          Returns:
              | False most of the time
              | True when the has toggled the checkbox.