[Python-es] Manejo de eventos en wxPython

Jose Antonio Jiménez josejcamara en gmail.com
Mar Abr 27 09:40:55 CEST 2010


El 27 de abril de 2010 09:31, Narcis Garcia - GiLUG
<informatica en actiu.net>escribió:

> Ahora lo he puesto así:
> NuevoControl = wx.RadioBox(self, -1, AnimalActual, ...)
> self.LosControles.append(NuevoControl)
> NuevoControl.Bind(wx.EVT_RADIOBUTTON, self.UnaReaccion)
>
> No me da ningun error, pero tampoco reacciona.
> Lo que espero es que al pulsar y/o cambiar valores de las casillas me
> ejecute la función "UnaReaccion".
>
>
> En/na Jose Antonio Jiménez ha escrit:
>
>>
>>
>> El 27 de abril de 2010 00:08, <rafaelcantos en hotmail.com <mailto:
>> rafaelcantos en hotmail.com>> escribió:
>>
>>
>>    Buenas.
>>
>>    yo estoy empezando ahora con wxpython, pero veo algo mal, o eso
>>    entiendo:
>>
>>    NuevoControl = self.LosControles.append(wx.RadioBox(self, -1,
>>    AnimalActual, (PosX, PosY), wx.DefaultSize, OpcionesPosibles, 1))
>>    self.Bind(wx.EVT_RADIOBUTTON, self.UnaReaccion, NuevoControl)
>>
>>    Por lo que yo veo ahí, estás conectando el evento  a la ventana y no
>>    al control. self contiene la ventana, no el control. Lo que me
>>    despista ahí es el tercer parámetro que pasas, la verdad.
>>    La forma que yo conozco (desconozco si hay otra) es con esta forma:
>>
>>    self.miControl.bind(ex.evento, self.miFuncion)
>>
>>    Intenta transformarlo en esta forma, a ver si te funciona.
>>
>>    saludos
>>
>>    Rafa
>>
>>
>>
>>    --------------------------------------------------
>>    From: "Narcis Garcia - GiLUG" <informatica en actiu.net
>>    <mailto:informatica en actiu.net>>
>>
>>    Sent: Monday, April 26, 2010 9:44 PM
>>    To: <python-es en python.org <mailto:python-es en python.org>>
>>
>>    Subject: [Python-es] Manejo de eventos en wxPython
>>
>>
>>        Hola, soy nuevo en la lista y ante todo quiero agradecer a
>>        quienes la
>>        mantienen en funcionamiento y a quienes tienen la paciencia de
>>        ayudar a
>>        los demás.
>>
>>        Estoy empezando en Python desarrollando una pequeña aplicación con
>>        interfaz gráfica (sin asistentes/IDE/RAD), y estoy intentando
>>        manejar
>>        eventos para los controles en una ventana, pero la pequeña
>>        muestra que
>>        adjunto no reacciona a nada.
>>
>>        ¿Puede alguien explicar qué es lo que estoy haciendo mal?
>>        Quiero lanzar un cuadro de diálogo con el título "Funciona"
>>        cuando el
>>        usuario cambia un valor, pero sólo el formulario es mostrado sin
>>        ninguna
>>        reacción ni error.
>>
>>        Gracias.
>>
>>
>>
>>
>>        #!/usr/bin/python
>>        import wx
>>        AnimalesDisponibles = ["gato", "perro", "pajaro"]
>>
>>        class InterfazPrincipal(wx.Frame):
>>        def __init__(self, parent, title):
>>        wx.Frame.__init__(self, parent, title=title)
>>        OpcionesPosibles = ["Sentar", "Caminar", "Correr"]
>>        self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)
>>        self.LosControles = []
>>        NrControlActual = 0
>>        for AnimalActual in AnimalesDisponibles:
>>        PosX = 10+90*NrControlActual
>>        PosY = 10
>>        NuevoControl = self.LosControles.append(wx.RadioBox(self, -1,
>>        AnimalActual, (PosX, PosY), wx.DefaultSize, OpcionesPosibles, 1))
>>        self.Bind(wx.EVT_RADIOBUTTON, self.UnaReaccion, NuevoControl)
>>        NrControlActual = NrControlActual + 1
>>        self.Show(True)
>>        def UnaReaccion(self, event):
>>        wx.MessageBox(event, "Funciona")
>>        event.Skip()
>>
>>        Aplicacion = wx.App(False)
>>        MiVentana = InterfazPrincipal(None, "Una prueba de eventos")
>>        Aplicacion.MainLoop()
>>
>>
>>
>>
>>
>>        _______________________________________________
>>        Python-es mailing list
>>        Python-es en python.org <mailto:Python-es en python.org>
>>
>>        http://mail.python.org/mailman/listinfo/python-es
>>        FAQ: http://python-es-faq.wikidot.com/
>>
>>    _______________________________________________
>>    Python-es mailing list
>>    Python-es en python.org <mailto:Python-es en python.org>
>>
>>    http://mail.python.org/mailman/listinfo/python-es
>>    FAQ: http://python-es-faq.wikidot.com/
>>
>>
>>  NuevoControl = self.LosControles.append(wx.RadioBox( ...
>>  NuevoControl tiene el resultado de la función append, que es None, por
>> eso te da ese mensaje de error.
>>  Prueba a:
>> NuevoControl = wx.RadioBox(...
>> self.LosControloes.append(NuevoControl)
>>  Y luego, para el evento, la forma en que lo haces está bien. También es
>> correcta la forma que te dice Narcis (NuevoControl.Bind(...) )
>>
>> --
>> Un saludo. Jose
>>
>>
>> ------------------------------------------------------------------------
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>  _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



En principio no veo nada extraño en tu codigo. ¿Tiene solo un radio button o
tienes varios?.
Creo que la acción se ejecuta al cambiar el valor del radio button y si solo
tienes uno no ocurrirá nunca ese cambio.

Echale un vistazo a http://zetcode.com/wxpython/widgets, es de los manuales
mas simples, pero queda bastante claro.


-- 
Un saludo. Jose
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100427/c4928ff5/attachment.html>


Más información sobre la lista de distribución Python-es