1
2
3
4
5
6
7
8
9
10
11 from pilas.actores import Actor
12 import pilas
13
14
16 """Representa un boton que reacciona al ser presionado.
17
18 .. image:: images/actores/boton_normal.png
19
20 """
21
22 - def __init__(self, x=0, y=0,
23 ruta_normal='boton/boton_normal.png',
24 ruta_press='boton/boton_press.png',
25 ruta_over='boton/boton_over.png',
26 ):
27 """ Constructor del Boton.
28
29 :param x: Posición horizontal del Actor.
30 :type x: int
31 :param y: Posición vertical del Actor.
32 :type y: int
33 :param ruta_normal: Ruta de la imagen del boton en estado normal.
34 :type ruta_normal: string
35 :param ruta_press: Ruta de la imagen del boton cuando se presiona.
36 :type ruta_press: string
37 :param ruta_over: Ruta de la imagen del boton cuando el ratón pasa por encima.
38 :type ruta_over: string
39 """
40
41 self.ruta_normal = ruta_normal
42 self.ruta_press = ruta_press
43 self.ruta_over = ruta_over
44
45 self.funciones_normal = []
46 self.funciones_press = []
47 self.funciones_over = []
48
49 self.estado = True
50
51 Actor.__init__(self, ruta_normal, x=x, y=y)
52 self._cargar_imagenes(self.ruta_normal, self.ruta_press, self.ruta_over)
53
54 self.escena.mueve_mouse.conectar(self.detection_move_mouse)
55 self.escena.click_de_mouse.conectar(self.detection_click_mouse)
56 self.escena.termina_click.conectar(self.detection_end_click_mouse)
57
66
67
69 """ Permite conectar un metodo para que sea ejecutado cuando el botón
70 pase al estado normal.
71
72 >>> def cuando_deja_de_pulsar():
73 >>> b.pintar_normal()
74 >>>
75 >>> mi_boton.conectar_normal(cuando_deja_de_pulsar)
76
77 :param funcion: Método a llamar cuando el botón pase a estado Normal.
78 :param arg: Argumentos a pasar a la funcion.
79 """
80 t = (funcion, arg)
81 self.funciones_normal.append(t)
82
84 """ Permite conectar un metodo para que sea ejecutado cuando el botón
85 se presiona.
86
87 >>> def cuando_pulsan_el_boton():
88 >>> b.pintar_presionado()
89 >>>
90 >>> mi_boton.conectar_presionado(cuando_pulsan_el_boton)
91
92 :param funcion: Método a llamar cuando el botón pase a estado Normal.
93 :param arg: Argumentos a pasar a la funcion.
94 """
95 t = (funcion, arg)
96 self.funciones_press.append(t)
97
99 """ Permite conectar un metodo para que sea ejecutado cuando el ratón
100 pasa por encima del botón.
101
102 >>> def cuando_pasa_sobre_el_boton():
103 >>> b.pintar_sobre()
104 >>>
105 >>> mi_boton.conectar_sobre(cuando_pasa_sobre_el_boton)
106
107 :param funcion: Método a llamar cuando el botón pase a estado Normal.
108 :param arg: Argumentos a pasar a la funcion.
109 """
110 t = (funcion, arg)
111 self.funciones_over.append(t)
112
114 """ Elimina todas las funciones asociadas al estado normal del botón. """
115 self.funciones_normal = []
116
118 """ Elimina todas las funciones asociadas al estado presionado del botón. """
119 self.funciones_press = []
120
122 """ Elimina todas las funciones asociadas al estado sobre del botón. """
123 self.funciones_over = []
124
126 """ Elimina el método indicado asociado al estado normal del botón.
127
128 :param funcion: Método al que se llama cuando el botón pasa estado Normal.
129 :param arg: Argumentos que se pasaban a la funcion.
130 """
131 t = (funcion, arg)
132 self.funciones_normal.remove(t)
133
135 """ Elimina el método indicado asociado al estado presinado del botón.
136
137 :param funcion: Método al que se llama cuando el botón pasa estado Presionado.
138 :param arg: Argumentos que se pasaban a la funcion.
139 """
140 t = (funcion, arg)
141 self.funciones_press.remove(t)
142
144 """ Elimina el método indicado asociado al estado sobre del botón.
145
146 :param funcion: Método al que se llama cuando el botón pasa estado Sobre.
147 :param arg: Argumentos que se pasaban a la funcion.
148 """
149 t = (funcion, arg)
150 self.funciones_over.remove(t)
151
153 if self.estado == True:
154 for i in self.funciones_normal:
155 if i[1] == "null":
156 i[0]()
157 else:
158 i[0](i[1])
159
161 if self.estado == True:
162 for i in self.funciones_press:
163 if i[1] == "null":
164 i[0]()
165 else:
166 i[0](i[1])
167
169 if self.estado == True:
170 for i in self.funciones_over:
171 if i[1] == "null":
172 i[0]()
173 else:
174 i[0](i[1])
175
176
179
182
183
185 """ Dibuja el botón en estado normal. """
186 self.definir_imagen(self.imagen_normal)
187
189 """ Dibuja el botón en estado presinado.
190
191 :param ruta_press: Opcional. Ruta de la imagen del boton presionado.
192 :type ruta_press: string
193 """
194 if ruta_press == "null":
195 self.imagen_press = pilas.imagenes.cargar(self.ruta_press)
196 else:
197 self.imagen_press = pilas.imagenes.cargar(ruta_press)
198
199 self.definir_imagen(self.imagen_press)
200
202 """ Dibuja el botón en estado sobre. """
203 self.definir_imagen(self.imagen_over)
204
210
214
217