Desde PyBta 0.3, el módulo eventos
permite la creación y destrucción, de manejadores, por parte del
usuario. Estos eventos se catalogan dentro de la jerarquía,
manejadores de usuario.
En está entrada voy a explicar como se
usa esta idea, para ello, voy a utilizar un pequeño programa que
después comentaré:
Ejemplo en funcionamiento (Lo que debería pasar):
#
-*- coding: ISO-8859-1 -*-
#!
/usr/local/bin/python
#Programada
por:Jesús Hernández Paredes
import
pyBta
from
pyBta import
controles
pyBta.iniciar(titulo="Probando
manejadores.",dimensiones=(800,600))
class
Formulario(controles.BtaFormulario):
def
__init__(self):
controles.BtaFormulario.__init__(self)
def
pre_iniciar(self):
self.medidas=800,600
pyBta.eventos.crear_manejador_de_usuario("DESPLAZADOR_AL_MINIMO")
pyBta.eventos.crear_manejador_de_usuario("DESPLAZADOR_AL_MAXIMO")
self.boton=controles.BtaBotonTextual("MATAR
MANEJADORES.")
self.boton.ancho=800
self.boton.tama_fuente(30)
self.poner(self.boton)
self.texto=controles.BtaEtiquetaTextual("")
self.texto.colorFondo=pyBta.VAINILLA
self.texto.estilo=pyBta.ESTILO_BORDE_NEGRO
self.texto.alinear=pyBta.ALINEAR_CENTRO,pyBta.ALINEAR_CENTRO
self.texto.tama_fuente(30)
self.texto.medidas=300,300
self.texto.posicion=400-150,100
self.poner(self.texto)
self.dspH=controles.BtaDesplazadorH()
self.dspH.ancho=800
self.dspH.y=550
self.poner(self.dspH)
return
True
def
post_iniciar(self):
self.dspH.EventoTrocarValor=self.emitir_eventos
self.boton.EventoClick=self.matar_manejadores
pyBta.eventos.registrar_metodo("DESPLAZADOR_AL_MINIMO",
self,self.al_minimo)
pyBta.eventos.registrar_metodo("DESPLAZADOR_AL_MAXIMO",
self,self.al_maximo)
return
True
def
emitir_eventos(self,evento):
evento={"id":self.id_elemento()}
emitir=False
if
self.dspH.valorActual<=0:
emitir=True
evento["tipo"]="DESPLAZADOR_AL_MINIMO"
elif
self.dspH.valorActual>=self.dspH.maximo:
emitir=True
evento["tipo"]="DESPLAZADOR_AL_MAXIMO"
if
emitir:
pyBta.eventos.envio_directo(evento)
def
matar_manejadores(self,evento):
pyBta.eventos.borrar_manejador_de_usuario("DESPLAZADOR_AL_MINIMO")
pyBta.eventos.borrar_manejador_de_usuario("DESPLAZADOR_AL_MAXIMO")
self.texto.etiqueta="LOS
MANEJADORES \n ESTÁN MUERTOS."
def
al_minimo(self,evento):
self.texto.etiqueta="LLEGO
AL MÍNIMO"
def
al_maximo(self,evento):
self.texto.etiqueta="LLEGO
AL MÁXIMO"
formulario=Formulario()
pantalla=pyBta.BtaPantalla()
pantalla.poner(formulario)
pyBta.poner_pantalla(pantalla)
pyBta.ejecutar()
Explicaré lo que me interesa más
enfáticamente y dejaré el resto para futuras entradas.
En este ejemplo uso un formulario y en
su función, pre_iniciar, genero todos los elementos necesarios. Las
dos primeras lineas de esta función expresan la creación de los
manejadores de usuario:
pyBta.eventos.crear_manejador_de_usuario("DESPLAZADOR_AL_MINIMO")
pyBta.eventos.crear_manejador_de_usuario("DESPLAZADOR_AL_MAXIMO")
para crear un manejador se usa la
función, crear_manejador_de_usuario, que ofrece el objeto eventos.
Esta función, recibe una cadena de texto, que es el nombre del
manejador generado. El manejador pasará a estar disponible dentro
de la jerarquía, de usuario.
Lo siguiente que nos hace falta para
usar un manejador propio, es decidir en que lugar de nuestro
programa, queremos emitir eventos hacia el manejador. Yo uso la
función, emitir_eventos, como lugar, idóneo, para emitir señales a
mis dos nuevos manejadores. Esta función se ejecutará cada vez que
la barra de desplazamiento cambie su valor.
def
emitir_eventos(self,evento):
evento={"id":self.id_elemento()}
emitir=False
if
self.dspH.valorActual<=0:
emitir=True
evento["tipo"]="DESPLAZADOR_AL_MINIMO"
elif
self.dspH.valorActual>=self.dspH.maximo:
emitir=True
evento["tipo"]="DESPLAZADOR_AL_MAXIMO"
if
emitir:
pyBta.eventos.envio_directo(evento)
Para
emitir una señal a un manejador, primero debemos generar un
diccionario con la información necesaria, para emitir una señal
correcta.
Este
diccionario debe contener dos claves obligatorias:
id:
id del elemento, del cual se envía la señal al manejador.
tipo:
Nombre del manejador al que le enviamos la señal.
En
esta función, se genera un diccionario llamado, evento, se crea con
la clave id. A esta clave se le pasa, mediante la función,
id_elemento, del objeto BtaFormulario, el identificador único del
elemento, de este modo el manejador sabrá de que lugar proviene la
señal. Después se pregunta mediante el atributo, valorActual, del
control BtaDesplazador, si el valor es menor o igual a cero. De ser
así, se creará dentro del diccionario la clave, tipo y se le pasará
la cadena de texto "DESPLAZADOR_AL_MINIMO".
Si el valor es igual o mayor que el atributo, máximo, del
BtaDesplzador, se creará la clave, tipo, con la cadena de texto
"DESPLAZADOR_AL_MAXIMO".
Si alguno de los anteriores
casos fue correcto se pasará a la emisión de la señal. Esto se
hace mediante el objeto, eventos, usando su función envio_directo:
pyBta.eventos.envio_directo(evento)
A esta
función se le debe pasar el diccionario, creado, para que lo haga
llegar al el objeto, constructorDeEventos, el cual incluirá el
diccionario como una señal, más, dentro de la lista de señales a
emitir. Dentro del diccionario también se puede guardar cualquier
otra información adicional al evento generado.
Después de
cumplir estos pasos, el manejador estará funcionando y a la espera
de recibir las señales adecuadas. Lo siguiente, es crear métodos y
conectarlos como funciones de respuesta dentro del manejador. En el
ejemplo uso las funciones, al_minimo y al_maximo:
def
al_minimo(self,evento):
self.texto.etiqueta="LLEGO
AL MÍNIMO"
def
al_maximo(self,evento):
self.texto.etiqueta="LLEGO
AL MÁXIMO"
Estas
funciones reciben el parámetro, evento, este, no es más que el
diccionario generado en el paso anterior. Ya solo nos queda conectar
estas funciones al manejador, para que este responda en el momento
adecuado. Esto lo hago en la función, post_iniciar, que provee el
objeto, BtaFormulario:
pyBta.eventos.registrar_metodo("DESPLAZADOR_AL_MINIMO",
self,self.al_minimo)
pyBta.eventos.registrar_metodo("DESPLAZADOR_AL_MAXIMO",
self,self.al_maximo)
Esta
función, no es correcta para conectar eventos de tipo general o
global, pero si es correcta para conectar eventos de tipo usuario.
La función
recibe tres parámetros: el primero es el nombre del manejador, el
segundo es el objeto que registra la señal, en este caso el
BtaFormulario y el último es la función que se emitirá como
respuesta.
Todo esto,
se traduce en que el programa emitirá el evento
"DESPLAZADOR_AL_MINIMO"
cuando el, BtaDesplazador alcance su valor mínimo y
emitirá su evento "DESPLAZADOR_AL_MAXIMO"
cuando el, BtaDesplazador, alcance su valor máximo.
En la
función, matar_manejadores, se ejecutan las siguientes lineas:
pyBta.eventos.borrar_manejador_de_usuario("DESPLAZADOR_AL_MINIMO")
pyBta.eventos.borrar_manejador_de_usuario("DESPLAZADOR_AL_MAXIMO")
La función,
borrar_manejador_de_usuario, es la encargada de destruir el manejado
creado y de borrar todo lo que se encuentre conectado en su interior.
Aunque en
el ejemplo no se explique, si lo que se desea es borrar un grupo de
funciones conectadas al manejador se usa la función:
pyBta.eventos.eliminar_registros_por_id(tipo,idABorrar)
esta
función, recibe el nombre del manejador, del que se desea borrar el
grupo de conexiones y el id del elemento al cual están conectadas.
No hay comentarios:
Publicar un comentario