I never call Destroy. Not on dialog, not on frames, not on anything else, unless I want something destroyed *now*.
I always assumed that Destroy is called automatically for the C++ object when the Python object is garbage collected, but now I'm not so sure.
The C++ window objects are owned by their parent window, and so the Python proxy object can't own it and so it can't destroy it when the python object is garbage collected. Frames are a special case since it is possible for them to not have a parent, so by default they commit suicide when closed[1]. Although dialogs are also top-level windows and don't strictly need to have a parent, they don't destroy themselves when closed because most of the time you need to access their contents after the ShowModal returns, so you do need to explicitly call Destroy for dialogs. Other than that, you don't normally need to worry about destroying widgets as they will be destroyed when their parent is.
[1] If you catch the EVT_CLOSE event for a frame then you should either call Destroy from within it, or call event.Skip() so the frame will call it itself.
ยทยทยท
--
Robin Dunn
Software Craftsman http://wxPython.org Java give you jitters? Relax with wxPython!