Jan-16-2019, 10:56 AM
Hi - me again haha,
I sorted out my button class somewhat, so it now works to an extent. However, I now have the issue that whenever I click one button, it seems to run the function for both buttons on the screen. Does anyone know how to fix this (but I have a limited understanding of Python so... not too complicated if possible lol!)
Thank you!
I sorted out my button class somewhat, so it now works to an extent. However, I now have the issue that whenever I click one button, it seems to run the function for both buttons on the screen. Does anyone know how to fix this (but I have a limited understanding of Python so... not too complicated if possible lol!)
Thank you!
class Button: def __init__(self, rect, command, **kwargs): self.processOptions(kwargs) self.rect = pygame.Rect(rect) self.image = pygame.Surface(self.rect.size).convert() self.function = command self.text = self.font.render(self.text,True,self.fontColour) self.text_rect = self.text.get_rect(center=self.rect.center) def processOptions(self, kwargs): settings = { 'colour' :YELLOW, 'text' :'default', 'font' :pygame.font.SysFont(None, 80), 'fontColour' :BLACK, } for kwarg in kwargs: if kwarg in settings: settings[kwarg] = kwargs[kwarg] else: raise AttributeError("{} has no keyword: {}".format(self.__class__.__name__, kwarg)) self.__dict__.update(settings) def getEvent(self): if event.type == pygame.MOUSEBUTTONDOWN: self.onClick() def onClick(self): self.function() def draw(self, surface): self.image.fill(self.colour) surface.blit(self.image, self.rect) surface.blit(self.text, self.text_rect) def letterButton(): # setting buttons of each letter option & its location on the screen done = False while done == False: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True screen.fill(WHITE) title = lettersTitle.render('What letter does your name begin with?', False, BLACK) screen.blit(title, [0, 0]) def teacherChoice(): loginButton = Button((100, 100, 400, 100), loginScreen, text = 'Login') signupButton = Button((100, 250, 400, 100), signupScreen, text = 'New Teacher', colour = BLUE) done = False while done == False: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True screen.fill(WHITE) loginButton.getEvent() signupButton.getEvent() teacherChoice = True signup = False login = False screen.fill(WHITE) loginButton.draw(screen) signupButton.draw(screen) pygame.display.update() if login: teacherChoice = False loginScreen() if signup: teacherChoice = False signupScreen() pygame.quit() studentButton = Button((100, 100, 400, 100), letterButton, text = 'Student') teacherButton = Button((100, 250, 400, 100), teacherChoice, colour = BLUE, text = 'Teacher') while done == False: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True studentButton.getEvent() teacherButton.getEvent() originalScreen = True #screen.fill(WHITE) screen.blit(loginMessage, [100, 10]) mouse = pygame.mouse.get_pos() studentButton.draw(screen) teacherButton.draw(screen) pygame.display.update() pygame.quit()