¿Los eventos de wxPython se publican en orden?
-
06-07-2019 - |
Pregunta
Si se publican múltiples eventos usando wxPostEvent / wxCallAfter desde el mismo hilo, p. al hacer clic en el botón, ¿se supone que deben procesarse en el mismo orden?
En el siguiente ejemplo, wx.Callafter se utiliza para publicar eventos, que eventualmente llamarán a las funciones de devolución de llamada, se llamarán en el mismo orden, en el que se pasaron a wx.CallAfter
def onbutton(self, event):
wx.CallAfter(func1)
# some more code
wx.CallAfter(func2)
Solución
CallAfter publica los eventos en la cola de eventos y estos deben procesarse en orden. Aún así, se procesan en eventos inactivos, no se basan en la finalización de la función, por lo que el func2 podría procesarse antes de que se realice func1 dependiendo del momento de los eventos inactivos (por ejemplo, wx.Yield, etc.) Hay una discusión sobre un problema con esto aquí , y parece que puede ser una especie de complicado.
Otros consejos
Creo que debería estar garantizado. Tengo un código que toma datos del puerto serie en un hilo y dispara eventos para que wx los maneje. Incluso cuando recibe datos a 115 kbps, donde indudablemente dispararía varios eventos antes de que se procesen, los datos aparecen en orden cuando wx llama a mi controlador para imprimir / cerrar la sesión de datos.