Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/JAMButton.py
diff options
context:
space:
mode:
Diffstat (limited to 'JAMButton.py')
-rw-r--r--JAMButton.py1202
1 files changed, 660 insertions, 542 deletions
diff --git a/JAMButton.py b/JAMButton.py
index bd5666e..7425537 100644
--- a/JAMButton.py
+++ b/JAMButton.py
@@ -3,555 +3,673 @@
import pygame
import gc
-import sys
-from pygame.locals import *
+#from pygame.locals import *
gc.enable()
import JAMGlobals as VG
from JAMLabel import JAMLabel
+
class JAMButton(pygame.sprite.Sprite):
- def __init__(self, texto, imagen, tipo="rectangulo"):
- pygame.sprite.Sprite.__init__(self)
-
- self.image= None
- self.rect= None
- self.posicion= (0,0)
- self.select= False
- self.sonido_select= VG.get_sound_select()
- self.callback= None
- self.alineacion= "centro"
- self.tipo = tipo
-
- COLORCARA, COLORBAS, COLORBOR, GROSORBOR, DETALLE, ESPESOR= VG.get_default_jambutton_values()
-
- self.base= {"tamanio":None, "colorbas":COLORBAS, "colorbor":COLORBOR, "grosorbor":GROSORBOR, "detalle":DETALLE, "espesor":ESPESOR}
- self.cara= {"tamanio":None, "color":COLORCARA}
- self.borde_label= {"grosor": 0, "color":VG.get_negro()}
-
- self.etiqueta_unselect= JAMLabel(texto)
- self.etiqueta_unselect.set_contenedor(colorbas=self.cara["color"])
- self.etiqueta_select= JAMLabel(texto)
- self.etiqueta_select.set_contenedor(colorbas=self.base["colorbor"])
-
- self.JAMObjects = {"JAMLabelunselect": self.etiqueta_unselect, "JAMLabelselect": self.etiqueta_select, "Base": self.base, "Cara": self.cara, "Borde": self.borde_label}
-
- self.imagen_cara_unselect= None
- self.imagen_cara_select= None
- self.final_unselect= None
- self.final_select= None
-
- self.Reconstruye_JAMButton(["texto"])
-
- # ---------- SETEOS Y GET GENERALES ---------- #
- def get_text(self):
- ''' Devuelve la cadena de Texto en JAMLabel. '''
- return self.etiqueta_unselect.get_text()
-
- def set_tipo(self, tipo):
- ''' Setea el tipo de botón "elipse" o "rectangulo". '''
- if tipo and tipo != self.tipo and (tipo== "elipse" or tipo== "rectangulo"):
- self.tipo= tipo
- self.Reconstruye_JAMButton(["texto"])
-
- def get_posicion(self):
- ''' Devuelve la posición actual. '''
- return self.posicion
-
- # ---------- SETEOS SOBRE LA ETIQUETA ---------- #
- def set_text(self, tipo=None, tamanio=None, color=None, texto=None):
- ''' Setea el Texto en JAMLabel. '''
- self.etiqueta_unselect.set_text(tipo=tipo, tamanio=tamanio, color=color, texto=texto)
- self.etiqueta_select.set_text(tipo=tipo, tamanio=tamanio, color=color, texto=texto)
- self.Reconstruye_JAMButton(["texto"])
-
- def set_font_from_file(self, direccion_archivo, tamanio= None):
- ''' Setea la fuente desde un archivo en JAMLabel. '''
- self.etiqueta_unselect.set_font_from_file(direccion_archivo, tamanio)
- self.etiqueta_select.set_font_from_file(direccion_archivo, tamanio)
- self.Reconstruye_JAMButton(["texto"])
-
- def set_imagen(self, origen=None, tamanio=None):
- ''' Setea el Imagen en JAMLabel. '''
- self.etiqueta_unselect.set_imagen(origen=origen, tamanio=tamanio)
- self.etiqueta_select.set_imagen(origen=origen, tamanio=tamanio)
- self.Reconstruye_JAMButton(["imagen"])
- # ---------- SETEOS SOBRE LA ETIQUETA ---------- #
-
- # ---------- SETEOS SOBRE LA BASE ---------- #
- def set_tamanios(self, tamanio=None, grosorbor=None, detalle=None, espesor=None):
- cambios= False
- # desactivar tamaños
- if tamanio == -1 and tamanio != None:
- tamanio= None
- self.base["tamanio"]= None
- cambios= True
- if grosorbor == -1 and grosorbor != None:
- grosorbor= None
- self.base["grosorbor"]= 1
- cambios= True
- if detalle == -1 and detalle != None:
- detalle= None
- self.base["detalle"]= 1
- cambios= True
- if espesor == -1 and espesor != None:
- espesor= None
- self.base["espesor"]= 1
- cambios= True
-
- # establecer tamaños
- if tamanio and tamanio != self.base["tamanio"]:
- self.base["tamanio"]= tamanio
- cambios= True
- if grosorbor and grosorbor != self.base["grosorbor"]:
- self.base["grosorbor"]= grosorbor
- cambios= True
- if detalle and detalle != self.base["detalle"]:
- self.base["detalle"]= detalle
- cambios= True
- if espesor and espesor != self.base["espesor"]:
- self.base["espesor"]= espesor
- cambios= True
-
- if cambios:
- self.Reconstruye_JAMButton(["tamanio"])
-
- def set_colores(self, colorbas=None, colorbor=None, colorcara=None):
- ''' Setea los colores del botón y la etiqueta. '''
- cambios= False
- if colorbas and colorbas != self.base["colorbas"]:
- self.base["colorbas"]= colorbas
- cambios= True
- if colorbor and colorbor != self.base["colorbor"]:
- self.base["colorbor"]= colorbor
- cambios= True
- if colorcara and colorcara != self.cara["color"]:
- self.cara["color"]= colorcara
- cambios= True
-
- if cambios:
- self.etiqueta_unselect.set_contenedor(colorbas=self.cara["color"])#, grosor=None, colorbor=None)
- self.etiqueta_select.set_contenedor(colorbas=self.base["colorbor"])#, grosor=None, colorbor=None)
- self.Reconstruye_JAMButton(["colores"])
-
- def set_borde_label(self, grosor=None, color=None):
- ''' Agrega o quita un borde sobre la cara de JAMButton. '''
- cambios= False
- if grosor < 1 and grosor != self.borde_label["grosor"]:
- grosor= None
- cambios= True
- if grosor and grosor != self.borde_label["grosor"]:
- self.borde_label["grosor"]= grosor
- cambios= True
- if color and color != self.borde_label["color"]:
- self.borde_label["color"]= color
- cambios= True
-
- if cambios:
- self.Reconstruye_JAMButton(["borde"])
-
- def set_alineacion_label(self, alineacion):
- ''' Setea la alineacion de JAMLabel sobre la cara de JAMButton. '''
- if alineacion == "centro" or alineacion == "izquierda" or alineacion == "derecha":
- self.alineacion= alineacion
- self.Reconstruye_JAMButton(["alineacion"])
- # ---------- SETEOS SOBRE LA BASE ---------- #
-
- def connect(self, callback=None, sonido_select=None):
- '''Conecta el botón a una función y un sonido para reproducir al hacer click sobre JAMButton. '''
- self.callback = callback
- self.sonido_select = sonido_select # debes pasar una referencia al audio ya cargado para no cargarlo cada vez que creas un botón
-
- def set_posicion(self, punto=None):
- ''' Setea la posición de JAMButton en la pantalla. '''
- try:
- if punto:
- self.rect.x, self.rect.y = (punto)
- self.posicion = punto
- except:
- pass
-
- # ------------- GETS ------------------------
- def get_tamanio(self):
- return (self.rect.w, self.rect.h)
-
- # ----------- CONSTRUCCION -------------------
- def Reconstruye_JAMButton(self, cambios):
- ''' Cada vez que se setea algo, se reconstruye JAMButton con sus nuevos valores. '''
- if "tamanio" in cambios:
- # reconstruye la cara en base a la etiqueta
- self.cara["tamanio"]= None
- self.imagen_cara_unselect, self.imagen_cara_select= self.construye_cara()
-
- # verifica tamaño minimo para la base según la cara reconstruida
- anchominimo, altominimo= self.get_minimo_tamanio_base()
- if not self.base["tamanio"]: self.base["tamanio"]= (anchominimo, altominimo)
- ancho, alto= self.base["tamanio"]
- if anchominimo > ancho: ancho= anchominimo
- if altominimo > alto: alto= altominimo
-
- # Establece los nuevos tamaños
- self.base["tamanio"]= (ancho, alto)
- self.cara["tamanio"]= self.get_tamanio_cara_recalculado()
-
- self.imagen_cara_unselect, self.imagen_cara_select= self.construye_cara() # pegar la etiqueta sobre la cara (¿Alineaciones?)
- self.final_unselect, self.final_select = self.construye_boton() # pegar la cara sobre la base
-
- self.image = self.final_unselect
- self.rect = self.image.get_rect()
-
- self.set_posicion(self.posicion) # seteo automático de posición
-
- def get_minimo_tamanio_base(self):
- ''' Devuelve el tamaño mínimo que puede tener la base del botón. '''
- x= self.base["grosorbor"] + int(self.base["espesor"]/3)
- ancho= x + self.cara["tamanio"][0] + self.base["espesor"] + self.base["grosorbor"]
- y= self.base["grosorbor"] + int(self.base["espesor"]/3)
- alto= y + self.cara["tamanio"][1] + self.base["espesor"] + self.base["grosorbor"]
- return (ancho, alto)
-
- def get_tamanio_cara_recalculado(self):
- ''' Devuelve el tamaño que debe tener la cara luego de seteados los tamaños del JAMButton. '''
- tamanio= (0,0)
- if self.tipo == "elipse":
- (xx,yy,ss,zz)= self.etiqueta_unselect.rect
- x= self.base["grosorbor"] + int(self.base["espesor"]/3)+zz/2
- ancho= x + self.base["espesor"] + self.base["grosorbor"]+zz/2
- y= self.base["grosorbor"] + int(self.base["espesor"]/3)+zz/2
- alto= y + self.base["espesor"] + self.base["grosorbor"]+zz/2
- a,h= self.base["tamanio"]
- tamanio= (a- ancho, h -alto)
- else:
- x= self.base["grosorbor"] + int(self.base["espesor"]/3)
- ancho= x + self.base["espesor"] + self.base["grosorbor"]
- y= self.base["grosorbor"] + int(self.base["espesor"]/3)
- alto= y + self.base["espesor"] + self.base["grosorbor"]
- a,h= self.base["tamanio"]
- tamanio= (a- ancho, h -alto)
- return tamanio
-
- def construye_cara(self):
- ''' Crea la cara del botón y pega centrado en ella el JAMLabel. '''
- unselect, select= (None, None)
- if self.tipo == "elipse":
- w, h= (0,0)
- # toma tamaño de etiqueta como referencia
- if not self.cara["tamanio"]:
- w= self.etiqueta_unselect.rect.w+self.base["detalle"]+self.etiqueta_unselect.rect.h
- h= self.etiqueta_unselect.rect.h+self.base["detalle"]+self.etiqueta_unselect.rect.h
- self.cara["tamanio"] = (w, h)
- # la cara nunca puede ser menor que la etiqueta pero si mayor
- if self.cara["tamanio"] and self.cara["tamanio"][0]<self.etiqueta_unselect.rect.w+self.base["detalle"]+self.etiqueta_unselect.rect.h:
- w= self.etiqueta_unselect.rect.w+self.base["detalle"]+self.etiqueta_unselect.rect.h
- self.cara["tamanio"] = (w, h)
- if self.cara["tamanio"] and self.cara["tamanio"][1]<self.etiqueta_unselect.rect.h+self.base["detalle"]+self.etiqueta_unselect.rect.h:
- h= self.etiqueta_unselect.rect.h+self.base["detalle"]+self.etiqueta_unselect.rect.h
- self.cara["tamanio"] = (w, h)
- unselect= VG.get_Elipse(self.cara["color"], self.cara["tamanio"])
- select= VG.get_Elipse(self.base["colorbor"], self.cara["tamanio"])
-
- # alineación desabilitada por bug
- self.alineacion = "centro"
- unselect= VG.pegar_imagenes_centradas(self.etiqueta_unselect.image, unselect)
- select= VG.pegar_imagenes_centradas(self.etiqueta_select.image, select)
- else:
- w, h= (0,0)
- # toma tamaño de etiqueta como referencia
- if not self.cara["tamanio"]:
- w= self.etiqueta_unselect.rect[2]+self.base["detalle"]
- h= self.etiqueta_unselect.rect[3]+self.base["detalle"]
- self.cara["tamanio"] = (w, h)
- # la cara nunca puede ser menor que la etiqueta pero si mayor
- if self.cara["tamanio"] and self.cara["tamanio"][0]<self.etiqueta_unselect.rect[2]+self.base["detalle"]:
- w= self.etiqueta_unselect.rect[2]+self.base["detalle"]
- self.cara["tamanio"] = (w, h)
- if self.cara["tamanio"] and self.cara["tamanio"][1]<self.etiqueta_unselect.rect[3]+self.base["detalle"]:
- h= self.etiqueta_unselect.rect[3]+self.base["detalle"]
- self.cara["tamanio"] = (w, h)
- unselect= VG.get_Rectangulo(self.cara["color"], self.cara["tamanio"])
- select= VG.get_Rectangulo(self.base["colorbor"], self.cara["tamanio"])
-
- if self.alineacion == "centro":
- unselect= VG.pegar_imagenes_centradas(self.etiqueta_unselect.image, unselect)
- select= VG.pegar_imagenes_centradas(self.etiqueta_select.image, select)
- elif self.alineacion == "izquierda":
- unselect= VG.pegar_imagenes_alineado_izquierda(self.etiqueta_unselect.image, unselect)
- select= VG.pegar_imagenes_alineado_izquierda(self.etiqueta_select.image, select)
- elif self.alineacion == "derecha":
- unselect= VG.pegar_imagenes_alineado_derecha(self.etiqueta_unselect.image, unselect)
- select= VG.pegar_imagenes_alineado_derecha(self.etiqueta_select.image, select)
- else:
- self.alineacion = "centro"
- unselect= VG.pegar_imagenes_centradas(self.etiqueta_unselect.image, unselect)
- select= VG.pegar_imagenes_centradas(self.etiqueta_select.image, select)
-
- if self.borde_label["grosor"] > 1 and self.borde_label["grosor"] != None:
- if not self.borde_label["color"]: self.borde_label["color"]= VG.get_negro()
- if self.tipo == "elipse":
- # desabilitado por bug
- #unselect= VG.get_my_surface_whit_elipse_border(unselect, self.borde_label["color"], self.borde_label["grosor"])
- #select= VG.get_my_surface_whit_elipse_border(select, self.borde_label["color"], self.borde_label["grosor"])
- pass
- else:
- unselect= VG.get_my_surface_whit_border(unselect, self.borde_label["color"], self.borde_label["grosor"])
- select= VG.get_my_surface_whit_border(select, self.borde_label["color"], self.borde_label["grosor"])
- return unselect, select
-
- def construye_boton(self):
- ''' Construye las imagenes finales del botón. '''
- unselect= None
- select= None
- if self.tipo == "elipse":
- x= self.base["grosorbor"] + int(self.base["espesor"]/3)
- ancho= x + self.cara["tamanio"][0] + self.base["espesor"] + self.base["grosorbor"]
- y= self.base["grosorbor"] + int(self.base["espesor"]/3)
- alto= y + self.cara["tamanio"][1] + self.base["espesor"] + self.base["grosorbor"]
- self.base["tamanio"]= (ancho, alto)
- unselect= VG.get_Elipse(self.base["colorbas"], self.base["tamanio"])
- unselect= VG.get_my_surface_whit_elipse_border(unselect, self.base["colorbor"], self.base["grosorbor"])
- select= VG.get_Elipse(self.base["colorbas"], self.base["tamanio"])
- select= VG.get_my_surface_whit_elipse_border(select, self.base["colorbor"], self.base["grosorbor"])
- else:
- x= self.base["grosorbor"] + int(self.base["espesor"]/3)
- ancho= x + self.cara["tamanio"][0] + self.base["espesor"] + self.base["grosorbor"]
- y= self.base["grosorbor"] + int(self.base["espesor"]/3)
- alto= y + self.cara["tamanio"][1] + self.base["espesor"] + self.base["grosorbor"]
- self.base["tamanio"]= (ancho, alto)
- unselect= VG.get_Rectangulo(self.base["colorbas"], self.base["tamanio"])
- unselect= VG.get_my_surface_whit_border(unselect, self.base["colorbor"], self.base["grosorbor"])
- select= VG.get_Rectangulo(self.base["colorbas"], self.base["tamanio"])
- select= VG.get_my_surface_whit_border(select, self.base["colorbor"], self.base["grosorbor"])
-
- unselect.blit(self.imagen_cara_unselect, (x, y))
- select.blit(self.imagen_cara_select, (x, y))
- return unselect, select
- # -------------------- FIN DE METODOS DE CONSTRUCCION -------------------- #
-
- # -------------------- INICIO DE METODOS INTERNOS AUTOMÁTICOS -------------------- #
- def play_select(self):
- # reproduce un sonido cuando pasas el mouse sobre el botón
- if self.sonido_select:
- self.sonido_select.play()
-
- def update(self):
- # responde a los eventos del mouse sobre el sprite
- '''
- posicion = pygame.mouse.get_pos()
- # Selecciona el botón cuando el mouse pasa encima de él
- if self.rect.collidepoint(posicion):
- if self.select == False:
- self.play_select()
- self.image = self.final_select.copy()
- self.select = True
-
- if pygame.event.get(pygame.MOUSEBUTTONDOWN):
- if self.callback:
- return self.callback(self) # modificación 29 de mayo el boton se pasa a si mismo.
- else:
- if self.select == True:
- self.image = self.final_unselect.copy()
- self.select = False'''
-
- ''' Reimplementación para Compatibilidad en Plug de gtk y mejora en rendimiento:
- Los eventos se capturan por su tipo, se manejan y si es necesario se republican para habilitar la captura
- de los mismos por parte de otros controles.'''
- eventos_republicar= []
- eventos= pygame.event.get(pygame.MOUSEBUTTONDOWN)
- for event in eventos:
- posicion = event.pos
- if self.rect.collidepoint(posicion):
- # Si el mouse está presionado sobre el botón.
- if self.callback:
- # y si además hay callback para esta acción.
- pygame.event.clear()
- return self.callback(self)
- else:
- # Si el mouse no está presionado sobre el botón.
- if not event in eventos_republicar: eventos_republicar.append(event)
-
- eventos= pygame.event.get(pygame.MOUSEMOTION)
- for event in eventos:
- posicion = event.pos
- if self.rect.collidepoint(posicion):
- # Si el mouse está sobre el botón.
- if self.select == False:
- self.play_select()
- self.image = self.final_select
- self.select = True
- else:
- # Si el mouse no está sobre el botón.
- if self.select == True:
- self.image = self.final_unselect
- self.select = False
- if not event in eventos_republicar: eventos_republicar.append(event)
-
- for event in eventos_republicar:
- # Se republican todos los eventos que este control no debe manejar.
- pygame.event.post(event)
-
-# ----- FIN DE CLASE JAMButton - INICIO DE DEBUG Y EJEMPLO DE LA CLASE -----
+
+ def __init__(self, texto, imagen, tipo="rectangulo"):
+
+ pygame.sprite.Sprite.__init__(self)
+
+ self.image = None
+ self.rect = None
+ self.posicion = (0, 0)
+ self.select = False
+ self.sonido_select = VG.get_sound_select()
+ self.callback = None
+ self.alineacion = "centro"
+ self.tipo = tipo
+
+ vals = VG.get_default_jambutton_values()
+ COLORCARA, COLORBAS, COLORBOR, GROSORBOR, DETALLE, ESPESOR = vals
+
+ self.base = {
+ "tamanio": None, "colorbas": COLORBAS,
+ "colorbor": COLORBOR, "grosorbor": GROSORBOR,
+ "detalle": DETALLE, "espesor": ESPESOR}
+ self.cara = {"tamanio": None, "color": COLORCARA}
+ self.borde_label = {"grosor": 0, "color": VG.get_negro()}
+
+ self.etiqueta_unselect = JAMLabel(texto)
+ self.etiqueta_unselect.set_contenedor(colorbas=self.cara["color"])
+ self.etiqueta_select = JAMLabel(texto)
+ self.etiqueta_select.set_contenedor(colorbas=self.base["colorbor"])
+
+ self.JAMObjects = {
+ "JAMLabelunselect": self.etiqueta_unselect,
+ "JAMLabelselect": self.etiqueta_select,
+ "Base": self.base, "Cara": self.cara,
+ "Borde": self.borde_label}
+
+ self.imagen_cara_unselect = None
+ self.imagen_cara_select = None
+ self.final_unselect = None
+ self.final_select = None
+
+ self.Reconstruye_JAMButton(["texto"])
+
+ # ---------- SETEOS Y GET GENERALES ---------- #
+ def get_text(self):
+ """
+ Devuelve la cadena de Texto en JAMLabel.
+ """
+ return self.etiqueta_unselect.get_text()
+
+ def set_tipo(self, tipo):
+ """
+ Setea el tipo de botón "elipse" o "rectangulo".
+ """
+ if tipo and tipo != self.tipo and (
+ tipo == "elipse" or tipo == "rectangulo"):
+ self.tipo = tipo
+ self.Reconstruye_JAMButton(["texto"])
+
+ def get_posicion(self):
+ """
+ Devuelve la posición actual.
+ """
+ return self.posicion
+
+ # ---------- SETEOS SOBRE LA ETIQUETA ---------- #
+ def set_text(self, tipo=None, tamanio=None, color=None, texto=None):
+ """
+ Setea el Texto en JAMLabel.
+ """
+ self.etiqueta_unselect.set_text(tipo=tipo,
+ tamanio=tamanio, color=color, texto=texto)
+ self.etiqueta_select.set_text(tipo=tipo,
+ tamanio=tamanio, color=color, texto=texto)
+ self.Reconstruye_JAMButton(["texto"])
+
+ def set_font_from_file(self, direccion_archivo, tamanio=None):
+ """
+ Setea la fuente desde un archivo en JAMLabel.
+ """
+ self.etiqueta_unselect.set_font_from_file(direccion_archivo, tamanio)
+ self.etiqueta_select.set_font_from_file(direccion_archivo, tamanio)
+ self.Reconstruye_JAMButton(["texto"])
+
+ def set_imagen(self, origen=None, tamanio=None):
+ """
+ Setea el Imagen en JAMLabel.
+ """
+ self.etiqueta_unselect.set_imagen(origen=origen, tamanio=tamanio)
+ self.etiqueta_select.set_imagen(origen=origen, tamanio=tamanio)
+ self.Reconstruye_JAMButton(["imagen"])
+ # ---------- SETEOS SOBRE LA ETIQUETA ---------- #
+
+ # ---------- SETEOS SOBRE LA BASE ---------- #
+ def set_tamanios(self, tamanio=None, grosorbor=None,
+ detalle=None, espesor=None):
+ cambios = False
+ # desactivar tamaños
+ if tamanio == -1 and tamanio != None:
+ tamanio = None
+ self.base["tamanio"] = None
+ cambios = True
+ if grosorbor == -1 and grosorbor != None:
+ grosorbor = None
+ self.base["grosorbor"] = 1
+ cambios = True
+ if detalle == -1 and detalle != None:
+ detalle = None
+ self.base["detalle"] = 1
+ cambios = True
+ if espesor == -1 and espesor != None:
+ espesor = None
+ self.base["espesor"] = 1
+ cambios = True
+
+ # establecer tamaños
+ if tamanio and tamanio != self.base["tamanio"]:
+ self.base["tamanio"] = tamanio
+ cambios = True
+ if grosorbor and grosorbor != self.base["grosorbor"]:
+ self.base["grosorbor"] = grosorbor
+ cambios = True
+ if detalle and detalle != self.base["detalle"]:
+ self.base["detalle"] = detalle
+ cambios = True
+ if espesor and espesor != self.base["espesor"]:
+ self.base["espesor"] = espesor
+ cambios = True
+
+ if cambios:
+ self.Reconstruye_JAMButton(["tamanio"])
+
+ def set_colores(self, colorbas=None, colorbor=None, colorcara=None):
+ """
+ Setea los colores del botón y la etiqueta.
+ """
+ cambios = False
+ if colorbas and colorbas != self.base["colorbas"]:
+ self.base["colorbas"] = colorbas
+ cambios = True
+ if colorbor and colorbor != self.base["colorbor"]:
+ self.base["colorbor"] = colorbor
+ cambios = True
+ if colorcara and colorcara != self.cara["color"]:
+ self.cara["color"] = colorcara
+ cambios = True
+
+ if cambios:
+ self.etiqueta_unselect.set_contenedor(
+ colorbas=self.cara["color"])
+ self.etiqueta_select.set_contenedor(
+ colorbas=self.base["colorbor"])
+ self.Reconstruye_JAMButton(["colores"])
+
+ def set_borde_label(self, grosor=None, color=None):
+ """
+ Agrega o quita un borde sobre la cara de JAMButton.
+ """
+ cambios = False
+ if grosor < 1 and grosor != self.borde_label["grosor"]:
+ grosor = None
+ cambios = True
+ if grosor and grosor != self.borde_label["grosor"]:
+ self.borde_label["grosor"] = grosor
+ cambios = True
+ if color and color != self.borde_label["color"]:
+ self.borde_label["color"] = color
+ cambios = True
+
+ if cambios:
+ self.Reconstruye_JAMButton(["borde"])
+
+ def set_alineacion_label(self, alineacion):
+ """
+ Setea la alineacion de JAMLabel sobre la cara de JAMButton.
+ """
+ if alineacion == "centro" or alineacion == "izquierda" or \
+ alineacion == "derecha":
+ self.alineacion = alineacion
+ self.Reconstruye_JAMButton(["alineacion"])
+ # ---------- SETEOS SOBRE LA BASE ---------- #
+
+ def connect(self, callback=None, sonido_select=None):
+ """
+ Conecta el botón a una función y un sonido para reproducir al
+ hacer click sobre JAMButton.
+ """
+ self.callback = callback
+ self.sonido_select = sonido_select
+ # debes pasar una referencia al audio ya cargado para no cargarlo
+ # cada vez que creas un botón
+
+ def set_posicion(self, punto=None):
+ """
+ Setea la posición de JAMButton en la pantalla.
+ """
+ try:
+ if punto:
+ self.rect.x, self.rect.y = (punto)
+ self.posicion = punto
+ except:
+ pass
+
+ # ------------- GETS ------------------------
+ def get_tamanio(self):
+ return (self.rect.w, self.rect.h)
+
+ # ----------- CONSTRUCCION -------------------
+ def Reconstruye_JAMButton(self, cambios):
+ """
+ Cada vez que se setea algo, se reconstruye JAMButton
+ con sus nuevos valores.
+ """
+ if "tamanio" in cambios:
+ # reconstruye la cara en base a la etiqueta
+ self.cara["tamanio"] = None
+ dat = self.construye_cara()
+ self.imagen_cara_unselect, self.imagen_cara_select = dat
+
+ # verifica tamaño minimo para la base según la cara reconstruida
+ anchominimo, altominimo = self.get_minimo_tamanio_base()
+ if not self.base["tamanio"]:
+ self.base["tamanio"] = (anchominimo, altominimo)
+ ancho, alto = self.base["tamanio"]
+ if anchominimo > ancho:
+ ancho = anchominimo
+ if altominimo > alto:
+ alto = altominimo
+
+ # Establece los nuevos tamaños
+ self.base["tamanio"] = (ancho, alto)
+ self.cara["tamanio"] = self.get_tamanio_cara_recalculado()
+
+ dat = self.construye_cara()
+ self.imagen_cara_unselect, self.imagen_cara_select = dat
+ self.final_unselect, self.final_select = self.construye_boton()
+
+ self.image = self.final_unselect
+ self.rect = self.image.get_rect()
+
+ self.set_posicion(self.posicion)
+
+ def get_minimo_tamanio_base(self):
+ """
+ Devuelve el tamaño mínimo que puede tener la base del botón.
+ """
+ x = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ ancho = x + self.cara["tamanio"][0] + self.base[
+ "espesor"] + self.base["grosorbor"]
+ y = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ alto = y + self.cara["tamanio"][1] + self.base[
+ "espesor"] + self.base["grosorbor"]
+ return (ancho, alto)
+
+ def get_tamanio_cara_recalculado(self):
+ """
+ Devuelve el tamaño que debe tener la cara luego de seteados los
+ tamaños del JAMButton.
+ """
+ tamanio = (0, 0)
+ if self.tipo == "elipse":
+ (xx, yy, ss, zz) = self.etiqueta_unselect.rect
+ x = self.base["grosorbor"] + int(self.base["espesor"] / 3) + zz / 2
+ ancho = x + self.base["espesor"] + self.base["grosorbor"] + zz / 2
+ y = self.base["grosorbor"] + int(self.base["espesor"] / 3) + zz / 2
+ alto = y + self.base["espesor"] + self.base["grosorbor"] + zz / 2
+ a, h = self.base["tamanio"]
+ tamanio = (a - ancho, h - alto)
+ else:
+ x = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ ancho = x + self.base["espesor"] + self.base["grosorbor"]
+ y = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ alto = y + self.base["espesor"] + self.base["grosorbor"]
+ a, h = self.base["tamanio"]
+ tamanio = (a - ancho, h - alto)
+ return tamanio
+
+ def construye_cara(self):
+ """
+ Crea la cara del botón y pega centrado en ella el JAMLabel.
+ """
+ unselect, select = (None, None)
+ if self.tipo == "elipse":
+ w, h = (0, 0)
+ # toma tamaño de etiqueta como referencia
+ if not self.cara["tamanio"]:
+ w = self.etiqueta_unselect.rect.w + self.base[
+ "detalle"] + self.etiqueta_unselect.rect.h
+ h = self.etiqueta_unselect.rect.h + self.base[
+ "detalle"] + self.etiqueta_unselect.rect.h
+ self.cara["tamanio"] = (w, h)
+ # la cara nunca puede ser menor que la etiqueta pero si mayor
+ if self.cara["tamanio"] and self.cara[
+ "tamanio"][0] < self.etiqueta_unselect.rect.w + self.base[
+ "detalle"] + self.etiqueta_unselect.rect.h:
+ w = self.etiqueta_unselect.rect.w + self.base[
+ "detalle"] + self.etiqueta_unselect.rect.h
+ self.cara["tamanio"] = (w, h)
+ if self.cara["tamanio"] and self.cara[
+ "tamanio"][1] < self.etiqueta_unselect.rect.h + self.base[
+ "detalle"] + self.etiqueta_unselect.rect.h:
+ h = self.etiqueta_unselect.rect.h + self.base[
+ "detalle"] + self.etiqueta_unselect.rect.h
+ self.cara["tamanio"] = (w, h)
+ unselect = VG.get_Elipse(self.cara["color"], self.cara["tamanio"])
+ select = VG.get_Elipse(self.base["colorbor"], self.cara["tamanio"])
+
+ # alineación desabilitada por bug
+ self.alineacion = "centro"
+ unselect = VG.pegar_imagenes_centradas(
+ self.etiqueta_unselect.image, unselect)
+ select = VG.pegar_imagenes_centradas(
+ self.etiqueta_select.image, select)
+ else:
+ w, h = (0, 0)
+ # toma tamaño de etiqueta como referencia
+ if not self.cara["tamanio"]:
+ w = self.etiqueta_unselect.rect[2] + self.base["detalle"]
+ h = self.etiqueta_unselect.rect[3] + self.base["detalle"]
+ self.cara["tamanio"] = (w, h)
+ # la cara nunca puede ser menor que la etiqueta pero si mayor
+ if self.cara["tamanio"] and self.cara[
+ "tamanio"][0] < self.etiqueta_unselect.rect[
+ 2] + self.base["detalle"]:
+ w = self.etiqueta_unselect.rect[2] + self.base["detalle"]
+ self.cara["tamanio"] = (w, h)
+ if self.cara["tamanio"] and self.cara[
+ "tamanio"][1] < self.etiqueta_unselect.rect[
+ 3] + self.base["detalle"]:
+ h = self.etiqueta_unselect.rect[3] + self.base["detalle"]
+ self.cara["tamanio"] = (w, h)
+ unselect = VG.get_Rectangulo(
+ self.cara["color"], self.cara["tamanio"])
+ select = VG.get_Rectangulo(
+ self.base["colorbor"], self.cara["tamanio"])
+
+ if self.alineacion == "centro":
+ unselect = VG.pegar_imagenes_centradas(
+ self.etiqueta_unselect.image, unselect)
+ select = VG.pegar_imagenes_centradas(
+ self.etiqueta_select.image, select)
+ elif self.alineacion == "izquierda":
+ unselect = VG.pegar_imagenes_alineado_izquierda(
+ self.etiqueta_unselect.image, unselect)
+ select = VG.pegar_imagenes_alineado_izquierda(
+ self.etiqueta_select.image, select)
+ elif self.alineacion == "derecha":
+ unselect = VG.pegar_imagenes_alineado_derecha(
+ self.etiqueta_unselect.image, unselect)
+ select = VG.pegar_imagenes_alineado_derecha(
+ self.etiqueta_select.image, select)
+ else:
+ self.alineacion = "centro"
+ unselect = VG.pegar_imagenes_centradas(
+ self.etiqueta_unselect.image, unselect)
+ select = VG.pegar_imagenes_centradas(
+ self.etiqueta_select.image, select)
+
+ if self.borde_label["grosor"] > 1 and self.borde_label[
+ "grosor"] != None:
+ if not self.borde_label["color"]:
+ self.borde_label["color"] = VG.get_negro()
+ if self.tipo == "elipse":
+ # desabilitado por bug
+ #unselect= VG.get_my_surface_whit_elipse_border(
+ # unselect, self.borde_label[
+ # "color"], self.borde_label["grosor"])
+ #select= VG.get_my_surface_whit_elipse_border(
+ # select, self.borde_label[
+ # "color"], self.borde_label["grosor"])
+ pass
+ else:
+ unselect = VG.get_my_surface_whit_border(
+ unselect, self.borde_label["color"],
+ self.borde_label["grosor"])
+ select = VG.get_my_surface_whit_border(
+ select, self.borde_label["color"],
+ self.borde_label["grosor"])
+ return unselect, select
+
+ def construye_boton(self):
+ """
+ Construye las imagenes finales del botón.
+ """
+ unselect = None
+ select = None
+ if self.tipo == "elipse":
+ x = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ ancho = x + self.cara["tamanio"][0] + self.base[
+ "espesor"] + self.base["grosorbor"]
+ y = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ alto = y + self.cara["tamanio"][1] + self.base[
+ "espesor"] + self.base["grosorbor"]
+ self.base["tamanio"] = (ancho, alto)
+ unselect = VG.get_Elipse(self.base[
+ "colorbas"], self.base["tamanio"])
+ unselect = VG.get_my_surface_whit_elipse_border(
+ unselect, self.base["colorbor"], self.base["grosorbor"])
+ select = VG.get_Elipse(
+ self.base["colorbas"], self.base["tamanio"])
+ select = VG.get_my_surface_whit_elipse_border(
+ select, self.base["colorbor"], self.base["grosorbor"])
+ else:
+ x = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ ancho = x + self.cara["tamanio"][0] + self.base[
+ "espesor"] + self.base["grosorbor"]
+ y = self.base["grosorbor"] + int(self.base["espesor"] / 3)
+ alto = y + self.cara["tamanio"][1] + self.base[
+ "espesor"] + self.base["grosorbor"]
+ self.base["tamanio"] = (ancho, alto)
+ unselect = VG.get_Rectangulo(
+ self.base["colorbas"], self.base["tamanio"])
+ unselect = VG.get_my_surface_whit_border(
+ unselect, self.base["colorbor"], self.base["grosorbor"])
+ select = VG.get_Rectangulo(
+ self.base["colorbas"], self.base["tamanio"])
+ select = VG.get_my_surface_whit_border(
+ select, self.base["colorbor"], self.base["grosorbor"])
+
+ unselect.blit(self.imagen_cara_unselect, (x, y))
+ select.blit(self.imagen_cara_select, (x, y))
+ return unselect, select
+ # ------------------ FIN DE METODOS DE CONSTRUCCION -------------------- #
+
+ # ---------- INICIO DE METODOS INTERNOS AUTOMÁTICOS -------------------- #
+ #def play_select(self):
+ # """
+ # reproduce un sonido cuando pasas el mouse sobre el botón
+ # """
+ # if self.sonido_select:
+ # self.sonido_select.play()
+
+ def update(self):
+ """
+ responde a los eventos del mouse sobre el sprite.
+ """
+ eventos_republicar = []
+ eventos = pygame.event.get(pygame.MOUSEBUTTONDOWN)
+ for event in eventos:
+ posicion = event.pos
+ if self.rect.collidepoint(posicion):
+ # Si el mouse está presionado sobre el botón.
+ if self.callback:
+ # y si además hay callback para esta acción.
+ pygame.event.clear()
+ return self.callback(self)
+ else:
+ # Si el mouse no está presionado sobre el botón.
+ if not event in eventos_republicar:
+ eventos_republicar.append(event)
+
+ eventos = pygame.event.get(pygame.MOUSEMOTION)
+ for event in eventos:
+ posicion = event.pos
+ if self.rect.collidepoint(posicion):
+ # Si el mouse está sobre el botón.
+ if self.select == False:
+ #self.play_select()
+ self.image = self.final_select
+ self.select = True
+ else:
+ # Si el mouse no está sobre el botón.
+ if self.select == True:
+ self.image = self.final_unselect
+ self.select = False
+ if not event in eventos_republicar:
+ eventos_republicar.append(event)
+
+ for event in eventos_republicar:
+ # Se republican todos los eventos que este control no debe manejar.
+ pygame.event.post(event)
+
+
+'''
class Ejemplo(object):
- def __init__(self):
- self.ventana = None
- self.reloj = None
- self.nivel = "menu_0"
-
- self.fondo = None
- self.widgets = None
-
- self.resolucion = (800,800)
-
- self.setup()
- self.Run()
-
- def Run(self):
- self.ventana.blit(self.fondo, (0,0))
- self.widgets.draw(self.ventana)
- pygame.display.update()
-
- #self.widgets.sprites()[0].set_text(tipo="Arial", tamanio=25, color=None, texto="Flavio Danesse")
- #self.widgets.sprites()[0].set_imagen(origen=VG.URUGUAY, tamanio=None)
- #self.widgets.sprites()[0].set_colores(colorbas=None, colorbor=color, colorcara=None)
- #self.widgets.sprites()[0].set_tamanios(tamanio=tamanio, grosorbor=None, detalle=None, espesor=None)
- #self.widgets.sprites()[0].set_posicion(punto=(25,25))
- #self.widgets.sprites()[0].set_borde_label(grosor=2, color=VG.get_negro())
- self.widgets.sprites()[0].connect(callback= self.salir, sonido_select= VG.get_sound_select())
- contador = 0
- while self.nivel == "menu_0":
- self.reloj.tick(35)
-
- cambios=[]
- self.widgets.clear(self.ventana, self.fondo)
-
-
- if contador == 100:
- # Activa la siguiente línea para provocar cambios de texto en JAMButton
- contador= self.ejemplo_cambia_texto_en_button()
- # Activa la siguiente línea para provocar cambios de imagen en JAMButton
- contador= self.ejemplo_cambia_imagen_en_button()
- # Activa la siguiente línea para provocar cambios de contenedor en JAMButton
- contador= self.ejemplo_cambia_colores_en_button()
- # Activa la siguiente línea para provocar cambios de posicion en JAMButton
- contador= self.ejemplo_cambia_posicion_en_button()
- # Activa la siguiente línea para provocar cambios de tamaño en JAMButton
- contador= self.ejemplo_cambia_tamanios_en_button()
- pass # y amor
-
- self.widgets.update()
- self.handle_event()
- pygame.event.clear()
- cambios.extend ( self.widgets.draw(self.ventana) )
- pygame.display.update(cambios)
- contador += 1
-
- def ejemplo_cambia_texto_en_button(self):
- import random
- cambios = ["tipo", "tamanio", "color", "texto"]
- modificar = random.choice(cambios)
- if modificar == "tipo":
- tipos= ["Arial", "Purisa", "Times New Roman", "Vardana", "Impact", pygame.font.get_default_font()]
- tipo=random.choice(tipos)
- self.widgets.sprites()[0].set_text(tipo=random.choice(tipos), tamanio=None, color=None, texto=None)
- if modificar == "tamanio":
- tamanios= [10,20,30,40,45]
- tamanio=random.choice(tamanios)
- self.widgets.sprites()[0].set_text(tipo=None, tamanio=tamanio, color=None, texto=None)
- if modificar == "color":
- colores= [(0,0,0,255), (100,100,255,255), (110,25,255,255), (255,125,55,255)]
- color = random.choice(colores)
- self.widgets.sprites()[0].set_text(tipo=None, tamanio=None, color=color, texto=None)
- if modificar == "texto":
- textos= ["JAMLabel", "Presiona escape cuando quieras salir", "Modificando Texto en JAMLabel", "CeibalJAM 2011"]
- texto = random.choice(textos)
- self.widgets.sprites()[0].set_text(tipo=None, tamanio=None, color=None, texto=texto)
- return 0
-
- def ejemplo_cambia_imagen_en_button(self):
- import random
- cambios = ["origen", "tamanio"]
- modificar = random.choice(cambios)
- if modificar == "tamanio":
- tamanios= [(10,20),(30,200),(250,100),None]
- tamanio=random.choice(tamanios)
- self.widgets.sprites()[0].set_imagen(origen=None, tamanio=tamanio)
- if modificar == "origen":
- origenes= [VG.get_jamimagenes()[0], VG.get_jamimagenes()[1], -1]
- origen = random.choice(origenes)
- self.widgets.sprites()[0].set_imagen(origen=origen, tamanio=None)
- return 0
-
- def ejemplo_cambia_colores_en_button(self):
- import random
- cambios = ["colorbas", "colorbor", "colorcara"]
- modificar = random.choice(cambios)
-
- colores= [(10,20,100,255), (100,100,100,255), (255,255,255,255), (255,0,0,255)]
- color=random.choice(colores)
-
- if modificar == "colorbas":
- self.widgets.sprites()[0].set_colores(colorbas=color, colorbor=None, colorcara=None)
- if modificar == "colorbor":
- self.widgets.sprites()[0].set_colores(colorbas=None, colorbor=color, colorcara=None)
- if modificar == "colorcara":
- self.widgets.sprites()[0].set_colores(colorbas=None, colorbor=None, colorcara=color)
- return 0
-
- def ejemplo_cambia_tamanios_en_button(self):
- import random
- cambios = ["tamanio", "grosorbor", "detalle", "espesor"]
- modificar = random.choice(cambios)
-
- #set_tamanios(tamanio=None, grosorbor=None, detalle=None, espesor=None)
- if modificar == "tamanio":
- tamanios= [(200,100), (100,50), (20,20), (300,150), (10,500), (300,50), -1]
- tamanio = random.choice(tamanios)
- self.widgets.sprites()[0].set_tamanios(tamanio=tamanio, grosorbor=None, detalle=None, espesor=None)
- if modificar == "grosorbor":
- tamanios= [1, 5, 8, 10]
- tamanio = random.choice(tamanios)
- self.widgets.sprites()[0].set_tamanios(tamanio=None, grosorbor=tamanio, detalle=None, espesor=None)
- return 0
-
- def ejemplo_cambia_posicion_en_button(self):
- import random
- posiciones= [(0,0), (25,25), (25,100), (25,150)]
- posicion=random.choice(posiciones)
- self.widgets.sprites()[0].set_posicion(punto=posicion)
- return 0
-
- def setup(self):
- pygame.init()
- pygame.display.set_mode(self.resolucion , 0, 0)
- pygame.display.set_caption("Ejemplo")
-
- self.fondo = self.get_Fondo()
-
- self.widgets = pygame.sprite.OrderedUpdates()
- self.widgets.add(JAMButton("JAMButton Prueba", None, tipo="elipse"))
-
- self.ventana = pygame.display.get_surface()
- self.reloj = pygame.time.Clock()
-
- pygame.event.set_blocked([JOYAXISMOTION, JOYBALLMOTION, JOYHATMOTION, JOYBUTTONUP, JOYBUTTONDOWN,
- KEYUP, USEREVENT, QUIT, ACTIVEEVENT])
- pygame.event.set_allowed([MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN, VIDEORESIZE, VIDEOEXPOSE])
- pygame.mouse.set_visible(True)
-
- def get_Fondo(self):
- superficie = pygame.Surface( self.resolucion, flags=HWSURFACE )
- superficie.fill(VG.get_negro())
- return superficie
-
- def handle_event(self):
- for event in pygame.event.get():
- if event.type == pygame.KEYDOWN:
- self.salir()
- pygame.event.clear()
-
- def salir(self, datos=None):
- pygame.quit()
- sys.exit()
+
+ def __init__(self):
+
+ self.ventana = None
+ self.reloj = None
+ self.nivel = "menu_0"
+
+ self.fondo = None
+ self.widgets = None
+
+ self.resolucion = (800, 800)
+
+ self.setup()
+ self.Run()
+
+ def Run(self):
+ self.ventana.blit(self.fondo, (0, 0))
+ self.widgets.draw(self.ventana)
+ pygame.display.update()
+
+ #self.widgets.sprites()[0].set_text(
+ # tipo="Arial", tamanio=25, color=None, texto="Flavio Danesse")
+ #self.widgets.sprites()[0].set_imagen(origen=VG.URUGUAY, tamanio=None)
+ #self.widgets.sprites()[0].set_colores(
+ # colorbas=None, colorbor=color, colorcara=None)
+ #self.widgets.sprites()[0].set_tamanios(
+ # tamanio=tamanio, grosorbor=None, detalle=None, espesor=None)
+ #self.widgets.sprites()[0].set_posicion(punto=(25,25))
+ #self.widgets.sprites()[0].set_borde_label(
+ # grosor=2, color=VG.get_negro())
+ self.widgets.sprites()[0].connect(
+ callback=self.salir, sonido_select=VG.get_sound_select())
+ contador = 0
+ while self.nivel == "menu_0":
+ self.reloj.tick(35)
+
+ cambios = []
+ self.widgets.clear(self.ventana, self.fondo)
+
+ if contador == 100:
+ # Activa para provocar cambios de texto en JAMButton
+ contador = self.ejemplo_cambia_texto_en_button()
+ # Activa para provocar cambios de imagen en JAMButton
+ contador = self.ejemplo_cambia_imagen_en_button()
+ # Activa para provocar cambios de contenedor en JAMButton
+ contador = self.ejemplo_cambia_colores_en_button()
+ # Activa para provocar cambios de posicion en JAMButton
+ contador = self.ejemplo_cambia_posicion_en_button()
+ # Activa para provocar cambios de tamaño en JAMButton
+ contador = self.ejemplo_cambia_tamanios_en_button()
+
+ self.widgets.update()
+ self.handle_event()
+ pygame.event.clear()
+ cambios.extend(self.widgets.draw(self.ventana))
+ pygame.display.update(cambios)
+ contador += 1
+
+ def ejemplo_cambia_texto_en_button(self):
+ import random
+ cambios = ["tipo", "tamanio", "color", "texto"]
+ modificar = random.choice(cambios)
+ if modificar == "tipo":
+ tipos = ["Arial", "Purisa", "Times New Roman",
+ "Vardana", "Impact", pygame.font.get_default_font()]
+ self.widgets.sprites()[0].set_text(
+ tipo=random.choice(tipos), tamanio=None,
+ color=None, texto=None)
+ if modificar == "tamanio":
+ tamanios = [10, 20, 30, 40, 45]
+ tamanio = random.choice(tamanios)
+ self.widgets.sprites()[0].set_text(
+ tipo=None, tamanio=tamanio, color=None, texto=None)
+ if modificar == "color":
+ colores = [(0, 0, 0, 255), (100, 100, 255, 255),
+ (110, 25, 255, 255), (255, 125, 55, 255)]
+ color = random.choice(colores)
+ self.widgets.sprites()[0].set_text(tipo=None,
+ tamanio=None, color=color, texto=None)
+ if modificar == "texto":
+ textos = ["JAMLabel", "Presiona escape cuando quieras salir",
+ "Modificando Texto en JAMLabel", "CeibalJAM 2011"]
+ texto = random.choice(textos)
+ self.widgets.sprites()[0].set_text(tipo=None, tamanio=None,
+ color=None, texto=texto)
+ return 0
+
+ def ejemplo_cambia_imagen_en_button(self):
+ import random
+ cambios = ["origen", "tamanio"]
+ modificar = random.choice(cambios)
+ if modificar == "tamanio":
+ tamanios = [(10, 20), (30, 200), (250, 100), None]
+ tamanio = random.choice(tamanios)
+ self.widgets.sprites()[0].set_imagen(origen=None, tamanio=tamanio)
+ if modificar == "origen":
+ origenes = [VG.get_jamimagenes()[0], VG.get_jamimagenes()[1], -1]
+ origen = random.choice(origenes)
+ self.widgets.sprites()[0].set_imagen(origen=origen, tamanio=None)
+ return 0
+
+ def ejemplo_cambia_colores_en_button(self):
+ import random
+ cambios = ["colorbas", "colorbor", "colorcara"]
+ modificar = random.choice(cambios)
+
+ colores = [(10, 20, 100, 255), (100, 100, 100, 255),
+ (255, 255, 255, 255), (255, 0, 0, 255)]
+ color = random.choice(colores)
+
+ if modificar == "colorbas":
+ self.widgets.sprites()[0].set_colores(
+ colorbas=color, colorbor=None, colorcara=None)
+ if modificar == "colorbor":
+ self.widgets.sprites()[0].set_colores(
+ colorbas=None, colorbor=color, colorcara=None)
+ if modificar == "colorcara":
+ self.widgets.sprites()[0].set_colores(
+ colorbas=None, colorbor=None, colorcara=color)
+ return 0
+
+ def ejemplo_cambia_tamanios_en_button(self):
+ import random
+ cambios = ["tamanio", "grosorbor", "detalle", "espesor"]
+ modificar = random.choice(cambios)
+
+ #set_tamanios(tamanio=None, grosorbor=None, detalle=None, espesor=None)
+ if modificar == "tamanio":
+ tamanios = [(200, 100), (100, 50), (20, 20),
+ (300, 150), (10, 500), (300, 50), -1]
+ tamanio = random.choice(tamanios)
+ self.widgets.sprites()[0].set_tamanios(
+ tamanio=tamanio, grosorbor=None, detalle=None, espesor=None)
+ if modificar == "grosorbor":
+ tamanios = [1, 5, 8, 10]
+ tamanio = random.choice(tamanios)
+ self.widgets.sprites()[0].set_tamanios(
+ tamanio=None, grosorbor=tamanio, detalle=None, espesor=None)
+ return 0
+
+ def ejemplo_cambia_posicion_en_button(self):
+ import random
+ posiciones = [(0, 0), (25, 25), (25, 100), (25, 150)]
+ posicion = random.choice(posiciones)
+ self.widgets.sprites()[0].set_posicion(punto=posicion)
+ return 0
+
+ def setup(self):
+ pygame.init()
+ pygame.display.set_mode(self.resolucion, 0, 0)
+ pygame.display.set_caption("Ejemplo")
+
+ self.fondo = self.get_Fondo()
+
+ self.widgets = pygame.sprite.OrderedUpdates()
+ self.widgets.add(JAMButton("JAMButton Prueba", None, tipo="elipse"))
+
+ self.ventana = pygame.display.get_surface()
+ self.reloj = pygame.time.Clock()
+
+ pygame.event.set_blocked([
+ JOYAXISMOTION, JOYBALLMOTION, JOYHATMOTION,
+ JOYBUTTONUP, JOYBUTTONDOWN,
+ KEYUP, USEREVENT, QUIT, ACTIVEEVENT])
+ pygame.event.set_allowed([
+ MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN,
+ KEYDOWN, VIDEORESIZE, VIDEOEXPOSE])
+ pygame.mouse.set_visible(True)
+
+ def get_Fondo(self):
+ superficie = pygame.Surface(self.resolucion, flags=HWSURFACE)
+ superficie.fill(VG.get_negro())
+ return superficie
+
+ def handle_event(self):
+ for event in pygame.event.get():
+ if event.type == pygame.KEYDOWN:
+ self.salir()
+ pygame.event.clear()
+
+ def salir(self, datos=None):
+ pygame.quit()
+ sys.exit()
if __name__ == "__main__":
- Ejemplo()
+ Ejemplo()
+'''