[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] Question about Pygame-menu package



I'm trying to add the beautiful menus from Pygame-menu (https://github.com/ppizarror/pygame-menu) to my project, but having trouble. In my attached stripped down sample, I'm trying to show menu1 when the 1 key is pressed, and show menu2 when the 2 key is pressed. They're both "main menus" launched from the root of the app, as opposed to one being a submenu of the other.

My questions:

- how can I find out what item was selected in the menu? Clicking a selection triggers the item_selected() function, but doesn't send any info about which item was selected.

- how can I close a menu? Running menu1.disable() in item_selected() doesn't close the menu... How do I close the menu when something is selected?

Ideally in this sample I'd like to launch menu1 when the 1 key is pressed, choose a selection, print info about what was selected, and return to the root of the app. Then pressing keyboard 2 launches menu2, repeating the process.

Thanks for any help, and apologies if I'm missing something obvious here.


import pygame, sys
from pygame.locals import *


import pygameMenu                # This imports classes and other things
from pygameMenu.locals import *  # Import constants (like actions)



'''

Testing pygame-menu. Keyboard 1 launches menu1, keyboard 2 launches menu2.

'''



# set up pygame
pygame.init()

clock = pygame.time.Clock()



# set up the window
surface = pygame.display.set_mode((800, 600) )
pygame.display.set_caption('test')


surface.fill((255,255,255))





font1 = pygame.font.SysFont(None, 48)
text = font1.render('The Main Window', True, (0,255,0), (255,0,0))
textRect = text.get_rect()
textRect.centerx = surface.get_rect().centerx
textRect.centery = surface.get_rect().centery
surface.blit(text, textRect)

# draw the window onto the screen
pygame.display.update()





def menu_bg():
    """
    Background color of the main menu, on this function user can plot
    images, play sounds, etc.
    """
    surface.fill((40, 0, 40))


def item_selected():
    print "item selected"

    menu1.disable() # should close the menu? But isn't...
    print menu1.is_enabled()

    
#create menu1
menu1 = pygameMenu.Menu(surface,
                       bgfun=menu_bg,
                       enabled=False,
                       font=pygameMenu.fonts.FONT_NEVIS,
                       menu_alpha=90,
                       onclose=PYGAME_MENU_CLOSE,
                       title='Main Menu',
                       title_offsety=5,
                       window_height=800,
                       window_width=600
                       )


menu1.add_option('choice1', item_selected)
menu1.add_option('choice2', item_selected)
menu1.add_option('choice3', item_selected)
menu1.add_option('Exit', PYGAME_MENU_BACK)  



#create menu2
menu2 = pygameMenu.Menu(surface,
                       bgfun=menu_bg,
                       enabled=False,
                       font=pygameMenu.fonts.FONT_NEVIS,
                       menu_alpha=90,
                       onclose=PYGAME_MENU_CLOSE,
                       title='Menu 2',
                       title_offsety=5,
                       window_height=800,
                       window_width=600
                       )


menu2.add_option('menu2 choice1', item_selected)
menu2.add_option('menu2 choice2', item_selected)
menu2.add_option('menu2 choice3', item_selected)
menu2.add_option('menu2 Exit', PYGAME_MENU_BACK)  



# run the game loop
while True:

    clock.tick(60)

    events = pygame.event.get()


    # Execute main from principal menu if is enabled
    menu1.mainloop(events)
    menu2.mainloop(events)

    
    for event in events:

        if event.type == KEYDOWN:
            # open menu1 if they press the 1 key
            if event.key == 49:
                print "enabling menu1!"
                menu1.enable()
            # open menu2 if they press the 2 key
            elif event.key == 50:
                print "enabling menu2!"
                menu2.enable()
            print event.key
            
        
        if event.type == QUIT:
            pygame.quit()
            sys.exit()