I have a button class and I can't figure out how to change the image to a different one to make the button look like it's been clicked.
I've tried changing the button image to a different image from the file after "action" is true, which happens once the button is clicked.
#Load Button Images
SpawnButtonImg = pygame.image.load("images\SpawnButton.png")
SpawnButtonPressedImg = pygame.image.load("images\SpawnButtonPressed.png")
#button class
class Button():
def __init__(self, x, y, image, scale):
width = image.get_width()
height = image.get_height()
self.image = pygame.transform.scale(image, (int(width * scale), int(height * scale)))
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
self.clicked = False
def draw(self, screen):
action = False
#get mouse position
pos = pygame.mouse.get_pos()
#check mouseover and clicked conditions
if self.rect.collidepoint(pos):
if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False:
self.clicked = True
action = True
if pygame.mouse.get_pressed()[0] == 0:
self.clicked = False
#draw button on screen
screen.blit(self.image, (self.rect.x, self.rect.y))
return action
SpawnButton = Button(1760, 1000, SpawnButtonImg, 1)
def ButtonPress():
if SpawnButton.draw(screen):
print('SPAWN')
CodePudding user response:
You need to load 2 images and set the image that will be displayed depending on the state of self.clicked
:
lass Button():
def __init__(self, x, y, imageDefault, imageClicked, scale):
width = image.get_width()
height = image.get_height()
self.imageDefault = pygame.transform.scale(imageDefault, (int(width * scale), int(height * scale)))
self.imageClicked = pygame.transform.scale(imageClicked, (int(width * scale), int(height * scale)))
self.image = self.imageDefault
self.rect = self.image.get_rect()
self.rect.topleft = (x, y)
self.clicked = False
def draw(self, screen):
action = False
#get mouse position
pos = pygame.mouse.get_pos()
#check mouseover and clicked conditions
if self.rect.collidepoint(pos):
if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False:
self.clicked = True
action = True
self.image = self.imageClicked
if pygame.mouse.get_pressed()[0] == 0:
self.clicked = False
self.image = self.imageDefault
#draw button on screen
screen.blit(self.image, (self.rect.x, self.rect.y))
return action