I am currently having trouble with buttons in pygame. At the moment I am testing myself in pygame and I am trying to create a flappy bird type of game. What I am trying to achieve is that when I click on the play button on the main menu it will change the button sprite and run the main game.
I have managed to define the button function and get it to switch to the main game when I click. The only problem is that it doesn't show a different sprite when clicked and I can click anywhere in the application to switch to the main game instead of having to click on the button.
Any help would be much appreciated.
Thanks in Advance
import time
import random
import pygame
from pygame.locals import *
pygame.init()
#Predefined Colors
white = (255,255,255)
black = (0,0,0)
red = (200,0,0)
light_red = (255,0,0)
yellow = (200,200,0)
light_yellow = (255,255,0)
green = (34,177,76)
light_green = (0,255,0)
blue = (0,0,255)
light_blue = (0, 0, 200)
player_list = (
    # Red Bird
    ('assets/sprites/redbird-upflap.png', 'assets/sprites/redbird-midflap.png',
     'assets/sprites/redbird-downflap.png'),
    # Blue Bird
    ('assets/sprites/bluebird-upflap.png', 'assets/sprites/bluebird-midflap.png',
     'assets/sprites/bluebird-downflap.png'),
    # Yellow Bird
    ('assets/sprites/yellowbird-upflap.png', 'assets/sprites/yellowbird-midflap.png',
     'assets/sprites/yellowbird-downflap.png')
)
background_list = (
    ('assets/sprites/background-day.png', 'assets/sprites/background-night.png')
)
pipe_list = (
    ('assets/sprites/pipe-green.png', 'assets/sprites/pipe-red.png')
)
FPS = 30
images, sounds = {}, {}
def main():
    global base_x, base_y, clock, gameDisplay, display_height, display_width
    display_width = 288
    display_height = 512
    base_x = 0
    base_y = display_height * 0.79
    clock = pygame.time.Clock()
    gameDisplay = pygame.display.set_mode((display_width, display_height))
    pygame.display.set_caption("Flappy Bird")
    #Loading icon sprite
    images['Icon'] = pygame.image.load('assets/sprites/yellowbird-midflap.png')
    pygame.display.set_icon(images['Icon'])
    #Loading all the Numbers sprites
    images['Numbers'] = (
        pygame.image.load('assets/sprites/0.png').convert_alpha(),
        pygame.image.load('assets/sprites/1.png').convert_alpha(),
        pygame.image.load('assets/sprites/2.png').convert_alpha(),
        pygame.image.load('assets/sprites/3.png').convert_alpha(),
        pygame.image.load('assets/sprites/4.png').convert_alpha(),
        pygame.image.load('assets/sprites/5.png').convert_alpha(),
        pygame.image.load('assets/sprites/6.png').convert_alpha(),
        pygame.image.load('assets/sprites/7.png').convert_alpha(),
        pygame.image.load('assets/sprites/8.png').convert_alpha(),
        pygame.image.load('assets/sprites/9.png').convert_alpha()
    )
    #Game Over Sprite
    images['Game Over'] = pygame.image.load('assets/sprites/gameover.png').convert_alpha()
    #Starting Game sprite
    images['Starting Game'] = pygame.image.load('assets/sprites/startgame-screen.png').convert_alpha()
    #Flappy Bird Logo sprite
    images['Flappy Bird Logo'] = pygame.image.load('assets/sprites/flappybird-logo.png').convert_alpha()
    #Base Ground sprite
    images['Base Ground'] = pygame.image.load('assets/sprites/base.png').convert_alpha()
    #Play Button Up sprite
    images['Play Button Up'] = pygame.image.load('assets/sprites/playbutton-up.png').convert_alpha()
    #Play Button Down sprite
    images['Play Button Down'] = pygame.image.load('assets/sprites/playbutton-down.png').convert_alpha()
    #Quit Button Up sprite
    #images['Quit Button Up'] = pygame.image.load('assets/sprites/quitbutton-up.png').convert_alpha()
    #Quit Button Down sprite
    #images['Quit Button Down'] = pygame.image.load('assets/sprites/quitbutton-down.png').convert_alpha()
    #Sounds
    # sounds['Die'] = pygame.mixer.Sound('assets/audio/die.wav')
    # sounds['Hit'] = pygame.mixer.Sound('assets/audio/hit.wav')
    # sounds['Point'] = pygame.mixer.Sound('assets/audio/point.wav')
    # sounds['swoosh'] = pygame.mixer.Sound('assets/audio/swoosh.wav')
    # sounds['wing'] = pygame.mixer.Sound('assets/audio/wing.wav')
    while True:
        #Select random Background sprites
        random_background = random.randint(0, len(background_list) - 1)
        images['Background'] = pygame.image.load(background_list[random_background]).convert()
        #Select random Player sprites
        random_player = random.randint(0, len(player_list) - 1)
        images['Player'] = (
            pygame.image.load(player_list[random_player][0]).convert_alpha(),
            pygame.image.load(player_list[random_player][1]).convert_alpha(),
            pygame.image.load(player_list[random_player][2]).convert_alpha()
        )
        #Select random Pipe sprite
        random_pipe = random.randint(0, len(pipe_list) - 1)
        images['Pipe'] = pygame.image.load(pipe_list[random_pipe])
        main_menu()
    pygame.display.update()
    clock.tick(FPS)
def button(action = None):
    cur = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    if action == 'Play':
        button = images['Play Button Up'].get_rect()
        for event in pygame.event.get():
            if click[0] == 1:
                if button.collidepoint(cur):
                    print ('Mouse Over')
                    images['Play Button Down']
                    main_game()
    else:
        gameDisplay.blit(images['Play Button Up'], (0, -10))
def main_menu():
    global player_index, player_x, player_y
    player_index = 0
    player_x = int(display_width * 0.2)
    player_y = int((display_height - images['Player']       [0].get_height()) / 2)
    menu = True
    while menu:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        gameDisplay.blit(images['Background'], (0, 0))
        gameDisplay.blit(images['Base Ground'], (base_x, base_y))
        gameDisplay.blit(images['Flappy Bird Logo'], (50, -30))
        gameDisplay.blit(images['Player'][player_index], (125, 140))
        gameDisplay.blit(images['Play Button Up'], (10, 10))
        button(action = 'Play')
        pygame.display.update()
        clock.tick(FPS)
def main_game():
    gameExit = False
    gameOver = False
    player_x = 0
    player_y = 0
    while not gameExit:
        if gameOver == True:
            gameDisplay.blit(images['Game Over'], 50, 50)
            pygame.display.update()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        gameDisplay.blit(images['Background'], (0, 0))
        gameDisplay.blit(images['Starting Game'], (0, 0))
        gameDisplay.blit(images['Base Ground'], (base_x, base_y))
        gameDisplay.blit(images['Player'][player_index], (player_x, player_y))
        pygame.display.update()
        clock.tick(FPS)
main() 
    