1
2
3
4
5
6
7
8
9 import pilas
10 from pilas.interfaz.base_interfaz import BaseInterfaz
11
12 -class Boton(BaseInterfaz):
13 """Representa un botón que se puede pulsar y disparar una acción."""
14
15 - def __init__(self, texto="Sin texto", x=0, y=0, icono=None):
37
39 """Asocia la función a ejecutar cuando se haga click sobre el botón.
40
41 :param funcion: Referencia a la función que se desea vincular.
42 """
43 self.funcion = funcion
44
46 "Genera las 3 imagenes de los botones."
47 ancho, alto = pilas.utils.obtener_area_de_texto(self.texto)
48 tema = pilas.imagenes.cargar("boton/tema.png")
49
50 self.imagen_normal = self._crear_imagen(tema, self.texto, ancho, 0)
51 self.imagen_sobre = self._crear_imagen(tema, self.texto, ancho, 103)
52 self.imagen_click = self._crear_imagen(tema, self.texto, ancho, 205)
53
54 self.imagen = self.imagen_normal
55
57 """Detecta el movimiento del mouse.
58
59 :param evento: El objeto que representa el movimiento del mouse.
60 """
61 if self.activo:
62 if self.colisiona_con_un_punto(evento.x, evento.y):
63 self.imagen = self.imagen_sobre
64 else:
65 self.imagen = self.imagen_normal
66
68 """Gestiona los clicks sobre el botón.
69
70 :param evento: Evento que representa al click.
71 """
72 if self.activo:
73 if self.imagen == self.imagen_sobre:
74 self.imagen = self.imagen_click
75
76 if self.funcion:
77 self.funcion()
78
80 "Genera una imagen de superficie de boton."
81 imagen = pilas.imagenes.cargar_superficie(20 + ancho, 30)
82 imagen.pintar_parte_de_imagen(tema, dx, 0, 5, 25, 0, 0)
83
84 for x in range(1, ancho + 20, 5):
85 imagen.pintar_parte_de_imagen(tema, dx + 5, 0, 5, 25, x, 0)
86
87 imagen.pintar_parte_de_imagen(tema, dx + 75, 0, 5, 25, ancho + 15, 0)
88 imagen.texto(texto, 10, 17)
89 return imagen
90