def _select(self): """ Apply selected option. :return: """ assert isinstance(self._actual, Menu) try: option = self._actual._option[self._actual._index][1] except: return a = isinstance(option, _locals.PymenuAction) b = str(type(option)) == "<class 'pygameMenu.locals" \ "._PymenuAction'>" # If element is a Menu if isinstance(option, Menu): actual = self self._actual._actual = option._actual self._actual._prev = actual self._actual._prev_draw = self.draw self.draw = option.draw # If option is a PyMenuAction elif a or b: # Back to menu if _locals._eq_action(option, _locals.PYGAME_MENU_BACK): self.reset(1) # Close menu elif _locals._eq_action(option, _locals.PYGAME_MENU_CLOSE): self.disable() self._closelocked = False closefun = self._actual._onclose if closefun is not None: if _locals._eq_action(closefun, _locals.PYGAME_MENU_RESET): self.reset(100) elif _locals._eq_action(closefun, _locals.PYGAME_MENU_BACK): self.reset(1) elif _locals._eq_action(closefun, _locals.PYGAME_MENU_EXIT): exit() elif isinstance(onclose, type(None)): closefun() # Exit program elif _locals._eq_action(option, _locals.PYGAME_MENU_EXIT): exit() # If element is a function elif isinstance(option, types.FunctionType) or callable(option): if len(self._actual._option[self._actual._index][2]) > 0: if type(self._actual._option[self._actual._index][2]) is tuple: option(*self._actual._option[self._actual._index][2]) else: option(self._actual._option[self._actual._index][2]) else: option() # If null type elif isinstance(option, type(None)): pass # If element is a selector elif isinstance(option, _Selector): option.apply()
def _main(self, events=None): """ Main function of the loop. :param events: Pygame events :return: None """ if self._actual._dopause: # If menu pauses game then apply function self._bgfun() self.draw() if events is None: events = _pygame.event.get() for event in events: if event.type == _pygame.locals.QUIT: exit() elif event.type == _pygame.locals.KEYDOWN: if event.key == _ctrl.MENU_CTRL_DOWN: self._down() elif event.key == _ctrl.MENU_CTRL_UP: self._up() elif event.key == _ctrl.MENU_CTRL_ENTER: self._select() if not self._actual._dopause: return True elif event.key == _ctrl.MENU_CTRL_LEFT: self._left() elif event.key == _ctrl.MENU_CTRL_RIGHT: self._right() elif event.key == _ctrl.MENU_CTRL_BACK: self.reset(1) elif event.key == _ctrl.MENU_CTRL_CLOSE_MENU and \ not self._closelocked: onclose = self._actual._onclose close = True if not isinstance(onclose, type(None)): a = isinstance(onclose, _locals.PymenuAction) b = str(type( onclose)) == "<class 'pygameMenu.locals" \ "._PymenuAction'>" if a or b: if _locals._eq_action(onclose, _locals.PYGAME_MENU_RESET): self.reset(100) elif _locals._eq_action(onclose, _locals.PYGAME_MENU_BACK): self.reset(1) elif _locals._eq_action(onclose, _locals.PYGAME_MENU_EXIT): exit() elif _locals._eq_action( onclose, _locals.PYGAME_MENU_DISABLE_CLOSE): close = False elif isinstance(onclose, types.FunctionType): onclose() else: close = False if close: self.disable() return True _pygame.display.flip() self._closelocked = False return False