Aquí podría ser tu PUBLICIDAD


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 Vebjorn Ljosa
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 02:40
fuente por usuario Alan Briolat


Aquí podría ser tu PUBLICIDAD


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 08:05
fuente por usuario Vebjorn Ljosa