Re: [Python-es] Manejo de eventos en wxPython
He probado así: NuevoControl.Bind(wx.EVT_RADIOBUTTON, self.UnaReaccion) Pero me devuelve: AttributeError: 'NoneType' object has no attribute 'Bind' En/na rafaelcan...@hotmail.com ha escrit: 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 informat...@actiu.net Sent: Monday, April 26, 2010 9:44 PM To: python-es@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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Manejo de eventos en wxPython
El 27 de abril de 2010 00:08, rafaelcan...@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 informat...@actiu.net Sent: Monday, April 26, 2010 9:44 PM To: python-es@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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Manejo de eventos en wxPython
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, rafaelcan...@hotmail.com mailto:rafaelcan...@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 informat...@actiu.net mailto:informat...@actiu.net Sent: Monday, April 26, 2010 9:44 PM To: python-es@python.org mailto:python-es@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@python.org mailto:Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org mailto:Python-es@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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Manejo de eventos en wxPython
El 27 de abril de 2010 09:31, Narcis Garcia - GiLUG informat...@actiu.netescribió: 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, rafaelcan...@hotmail.com mailto: rafaelcan...@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 informat...@actiu.net mailto:informat...@actiu.net Sent: Monday, April 26, 2010 9:44 PM To: python-es@python.org mailto:python-es@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@python.org mailto:Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org mailto:Python-es@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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@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
Re: [Python-es] Manejo de eventos en wxPython
Solucionado. He cambiado EVT_RADIOBUTTON por EVT_RADIOBOX, y luego para evitar errores al MessageBox le he cambiado event por event.GetString(). Gracias. Lo que no comprendo es porqué la función de evento se ejecuta 3 veces cuando el usuario pulsa 1 sola vez. En/na Oswaldo Hernández ha escrit: Jose Antonio Jiménez escribió: El 27 de abril de 2010 09:31, Narcis Garcia - GiLUG informat...@actiu.net mailto:informat...@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. Normal que no reaccione. Has creado un RadioBox y le estas diciendo que capture un evento tipo EVT_RADIOBUTTON. Saludos, ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Manejo de eventos en wxPython
Narcis Garcia - GiLUG escribió: ... Lo que no comprendo es porqué la función de evento se ejecuta 3 veces cuando el usuario pulsa 1 sola vez. No es recomendable crear los objetos directamente sobre wx.Frame, una de las consecuencias es la posible duplicidad de eventos. Lo correcto es crear un wx.Panel que actúe de fondo del Frame y crear los objetos sobre el panel. class miFrame(wx.Frame): def __init__(self, *args, **kwds): wx.Frame.__init__(self, *args, **kwds) FondoFrame = wx.Panel(self, -1) # creacion de objetos sobre el panel de fondo objeto = wx.RadioBox(FondoFrame, -1) ... -- Oswaldo Hernández ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Manejo de eventos en wxPython
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 informat...@actiu.net Sent: Monday, April 26, 2010 9:44 PM To: python-es@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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/