¿Cómo puedo llamar un evento específico manualmente desde mi propio código?wxPython: Llamar a un evento manualmente
Respuesta
Creo que quieres wx.PostEvent.
También hay información sobre la publicación de eventos de otra cadena para long running tasks on the wxPython wiki.
¿Quiere decir que desea tener un despacho de eventos?
:: wxPostEvent void wxPostEvent (wxEvtHandler * dest, wxEvent & evento)
En una aplicación de interfaz gráfica de usuario, esta función mensajes de eventos al objeto dest especificado utilizando wxEvtHandler :: AddPendingEvent. De lo contrario, distribuye el evento inmediatamente usando wxEvtHandler :: ProcessEvent. Consulte la documentación correspondiente para obtener detalles (y advertencias).
Incluir archivos
<wx/app.h>
Tema anterior, pero creo que lo he descifrado después de estar confundido por mucho tiempo, por lo que si alguien más viene por aquí en busca de la respuesta, esto podría ayudar.
Para contabilizar manualmente un evento, puede utilizar
self.GetEventHandler().ProcessEvent(event)
(docs wxWidgets here, documentos wxPython here)
o
wx.PostEvent(self.GetEventHandler(), event)
(wxWidgets docs, wxPython docs)
donde event
es el evento que desea publicar. Construya el evento con, p.
wx.PyCommandEvent(wx.EVT_BUTTON.typeId, self.GetId())
si desea publicar un evento EVT_BUTTON. Convertirlo en PyCommandEvent significa que se propagará hacia arriba; otros tipos de eventos no se propagan por defecto.
También puede crear eventos personalizados que pueden transportar los datos que desee. He aquí un ejemplo:.!
myEVT_CUSTOM = wx.NewEventType()
EVT_CUSTOM = wx.PyEventBinder(myEVT_CUSTOM, 1)
class MyEvent(wx.PyCommandEvent):
def __init__(self, evtType, id):
wx.PyCommandEvent.__init__(self, evtType, id)
myVal = None
def SetMyVal(self, val):
self.myVal = val
def GetMyVal(self):
return self.myVal
(creo que he encontrado este código en un archivo de la lista de correo en algún lugar, pero me parece que no puede encontrar otra vez Si esta es tu ejemplo, gracias Por favor, añadir un comentario y tomar crédito por eso!)
Así que ahora, para publicar un evento personalizado:
event = MyEvent(myEVT_CUSTOM, self.GetId())
event.SetMyVal('here is some custom data')
self.GetEventHandler().ProcessEvent(event)
y se puede unir al igual que cualquier otro evento
self.Bind(EVT_CUSTOM, self.on_event)
y obtener los datos personalizados en el controlador de eventos
def on_event(self, e):
data = e.GetMyVal()
print 'custom data is: {0}'.format(data)
O incluya los datos personalizados en el constructor de eventos y guarde un paso:
class MyEvent(wx.PyCommandEvent):
def __init__(self, evtType, id, val = None):
wx.PyCommandEvent.__init__(self, evtType, id)
self.myVal = val
etc.
la esperanza que esto sea útil a alguien.
Hay una manera simple, fácil de hacerlo con las versiones recientes de wxPython (véase http://wiki.wxpython.org/CustomEventClasses):
# create event class
import wx.lib.newevent
SomeNewEvent, EVT_SOME_NEW_EVENT = wx.lib.newevent.NewEvent()
# post it, with arbitrary data attached
wx.PostEvent(target, SomeNewEvent(attr1=foo, attr2=bar))
# bind it as usual
target.Bind(EVT_SOME_NEW_EVENT, target.handler)
- 1. ¿Cómo llamar un evento manualmente en C#?
- 2. Hibernar: ¿Llamar a un SequenceGenerator manualmente?
- 3. ¿Cómo invocar manualmente un evento?
- 4. wxpython auinotebook cerrar pestaña evento
- 5. Javascript manualmente disparo .onchange() evento
- 6. wxPython: cómo determinar el origen de un evento
- 7. ¿Corregir el tiempo para llamar a viewDidAppear manualmente?
- 8. ¿Cómo llamar a ValidationAttributes manualmente? (DataAnnotations and ModelState)
- 9. Llamar a un evento después de cargar una pestaña jquery
- 10. ¿Debo llamar a Close() en un evento ManualReset?
- 11. En wxPython, ¿cómo vincular un evento EVT_KEY_DOWN a toda la ventana?
- 12. ¿Cómo activo manualmente un evento delegado con jQuery?
- 13. Highcharts: desencadenar manualmente el evento de desplazamiento sobre un punto
- 14. Marshall a un subproceso manualmente
- 15. ¿Debo cerrar manualmente un ifstream?
- 16. cómo llamar a la función js sin evento
- 17. Cómo llamar a jQuery AJAX al hacer clic en evento?
- 18. Focus-follows-mouse en wxPython?
- 19. Cómo llamar evento antes de Environment.Exit()?
- 20. Llamar a un método prototipo de clase por un evento setInterval
- 21. JQuery Datepicker, no se puede activar el evento onSelect manualmente.
- 22. crear manualmente un Django QuerySet o más bien manualmente agregar objetos a un QuerySet
- 23. PHP [OOP] - ¿Cómo llamar al constructor de clase manualmente?
- 24. Cablear manualmente el evento Page_PreInit, con AutoEventWireup establecido en falso
- 25. ¿Instalar manualmente un DataTemplate?
- 26. estado Cambio CheckBox sin llamar OnClick evento
- 27. wxPython Frame ¿activar/desactivar?
- 28. Adición wxpython en pygame
- 29. cherrypy y wxpython
- 30. Múltiples procesos que acceden a Django db backend; registros que no aparecen hasta llamar manualmente _commit
No sé C, esto es confuso. ¿Puedes darme la línea de Python que se supone que debo ejecutar? –
Creo que es lo mismo. wx.core.PostEvent? Check: http://www.google.com/codesearch?q=wxPostEvent&hl=en&btnG=Search+Code –
No lo veo en el espacio de nombres wx principal, ni en el espacio de nombres del evento. –