Package pilas :: Package actores :: Module globoelegir
[hide private]
[frames] | no frames]

Source Code for Module pilas.actores.globoelegir

 1  # -*- encoding: utf-8 -*- 
 2  import pilas 
 3  from pilas.actores.globo import Globo 
 4   
 5   
6 -class GloboElegir(Globo):
7 """Representa un mensaje de globo (similar a las historietas), pero con opciones para elegir. 8 9 >>> mensaje = u"Mi color favorito es el..." 10 >>> globo = pilas.actores.GloboElegir(mensaje, [u"rojo", u"verde", u"azul"], cuando_responde_color_favorito) 11 12 .. image:: images/actores/globo_elegir.png 13 14 El primer argumento es el mensaje a mostrar, el segundo una lista de opciones que se ofrecerán 15 y por último una función de respuesta. Que podría ser codificada así: 16 17 .. code-block:: python 18 19 def cuando_responde_color_favorito(respuesta): 20 print "Ha seleccionado la opcion: " + respuesta 21 22 """ 23
24 - def __init__(self, texto, opciones, funcion_a_invocar, x=0, y=0, dialogo=None):
25 """Constructor del dialogo: 26 27 :param texto: Cadena de texto que se tiene que mostrar. 28 :param opciones: Lista de opciones a mostrar. 29 :param funcion_a_invocar: Referencia a la función que se tiene que ejecutar cuando responde el usuario. 30 :param x: Posición horizontal. 31 :param y: Posición vertical. 32 :param dialogo: Instancia del manejador de dialogos, para crear mensajes enlazados. 33 """ 34 self.dialogo = dialogo 35 self.opciones = opciones 36 self.funcion_a_invocar = funcion_a_invocar 37 38 self.lista_seleccion = pilas.interfaz.ListaSeleccion(opciones, self._cuando_selecciona_opcion, x, y) 39 self.lista_seleccion.escala = 0.1 40 self.lista_seleccion.escala = [1], 0.2 41 self.lista_seleccion.z = 1 42 43 Globo.__init__(self, texto, x, y, dialogo=dialogo, 44 ancho_globo=self.lista_seleccion.ancho_opciones+24, 45 alto_globo=self.lista_seleccion.alto_opciones + (self.lista_seleccion.separacion_entre_opciones * len(self.opciones) * 2)) 46 self.z = 2
47
48 - def colocar_origen_del_globo(self, x, y):
49 """Cambia el punto de referencia del globo. 50 51 :param x: Punto de referencia horizontal. 52 :param y: Punto de referencia vertical. 53 """ 54 Globo.colocar_origen_del_globo(self, x, y) 55 56 self.lista_seleccion.centro = ("derecha", "abajo") 57 self.lista_seleccion.x = x - (self.ancho_globo - self.lista_seleccion.ancho_opciones) + 12 58 self.lista_seleccion.y = y + 35
59
60 - def _obtener_area_para_el_texto(self, texto):
61 ancho, alto = self.lienzo.obtener_area_de_texto(texto, tamano=14) 62 opciones_ancho, opciones_alto = self.lienzo.obtener_area_para_lista_de_texto(self.opciones, tamano=14) 63 return ancho + opciones_ancho, alto + opciones_alto
64
65 - def _escribir_texto(self, texto):
66 self.lienzo.escribir(texto, 12, 25, tamano=14)
67
68 - def cuando_quieren_avanzar(self, *k):
69 pass
70
71 - def _cuando_selecciona_opcion(self, opcion):
72 self.funcion_a_invocar(opcion) 73 Globo.cuando_quieren_avanzar(self) 74 self.lista_seleccion.eliminar()
75