Genere un evento CommandEvent personalizado en wxPython

votos
5

Mi ventana de nivel superior necesita saber cuándo cambia el estado interno de un control personalizado para que pueda actualizar otras partes de la GUI. ¿Cómo puedo generar un evento personalizado en el control, para que pueda propagarse y ser manejado por la ventana de nivel superior?

Publicado el 12/03/2009 a las 20:05
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
12

Sé que esto es una vieja pregunta, pero hay una, un poco más agradable, más nueva manera de hacer esto en wxPython. Parafraseado de http://wiki.wxpython.org/CustomEventClasses y lo anterior:

Para definir el evento:

import wx.lib.newevent
QuantityChangedEvent, EVT_QUANTITY_CHANGED = wx.lib.newevent.NewCommandEvent()

Para generar un evento:

event = QuantityChangedEvent(self.GetId())
self.GetEventHandler().ProcessEvent(event)
# or ...
#wx.PostEvent(self, event)

La unión del evento sigue siendo el mismo.

Respondida el 07/09/2010 a las 14:40
fuente por usuario

votos
11

Para propagarse, el evento debe ser un wx.CommandEvent . (Consulte la descripción general del manejo de eventos de wxWidgets para obtener detalles sobre la propagación). Más específicamente, debe ser un wx.PyCommandEvent , que sea compatible con Python y pueda transportar sus bits de Python de manera segura a través del sistema de eventos wxWidgets y tenerlos aún allí cuando el controlador de eventos se invoca.

Defina su tipo de evento personalizado de la siguiente manera:

EVT_QUANTITY_CHANGED = wx.PyEventBinder(wx.NewEventType(), 1)

Probablemente desee hacer esto a nivel de módulo, aunque en algunas circunstancias puede ser conveniente hacerlo en el __init__método de su control.

El control ahora puede generar un evento de la siguiente manera:

event = wx.PyCommandEvent(EVT_QUANTITY_CHANGED.typeId, self.GetId())
self.GetEventHandler().ProcessEvent(event)

La ventana de nivel superior puede enlazar y manejar el evento de la manera habitual:

self.Bind(mycontrol.EVT_QUANTITY_CHANGED, self.OnQuantityChanged)
Respondida el 12/03/2009 a las 20:05
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more