I find the need to use CallAfter/CallLater on OS X to be quite a pain. I have never seen this spelled out as a wx coding rule, but it seems that any routine that responds to a Bind should never destroy any widget, because there could still be pending events for that widget. These actions need to be placed into routines that are invoked via a CallAfter/CallLater. This can make code reuse tough.
The fact that an event linked to a destroyed widget will crash Python makes debugging these problems really tough. I have spent days tracking down obscure but consistent crashes. I am not sure if the Seg Fault happens inside wxwidgets or wxPython, but if there were any way to trap these "bad" events, it would make wxPython oh so much more pleasant.
DestroyLater(self)Schedules the window to be destroyed in the near future.
This should be used whenever Destroy could happen too soon, such as when there may still be events for this window or its children waiting in the event queue.