i.e. self.Bind(wx.EVT_BUTTON, self.OnClick, aButton)
what objects are created? I tried tracing the code, but it went to the
C code with a call to core.EvtHandler_Connect(*args, **kwargs) in
EvtHandler.Connect.
… why do you care what objects are created? 
Do This objects need to be destroyed, presumbly with a call to UnBind?
As a rule, you don’t have to worry about any of that.
The Bind mechanism appears to allow binding of an event from one object
to a handler in another object. I understand that this is needed to
bind an event handler for a button click to the associated frame. Would
it also be possible to bind an event handler from a totally separate
object? When the button and the event handler are both in the same
frame object, destroying the frame destroys the button as well. What
would happen if the event handler was in a separate object and that
object were destroyed, but the button wasn’t?
Okay, first, if we’re talking about events getting to places from other objects, be sure you understand the difference between CommandEvents and regular Events. A regular event is fired in an object, and if that object has no handler for it-- that’s it. A CommandEvent, though, will then go and fire in that object’s parent to see if there’s a handler. If not? It’ll try that object’s parent, and so forth and so on.
Anyways… “object.Bind(wx.EVT_BUTTON, self.OnClick)” says, “If I (object) receive an EVT_BUTTON event, I should call “self.OnClick””. When a user clicks on a button, the button itself fires the event-- a command event-- and you can ‘catch’ it via either:
button.Bind(wx.EVT_BUTTON, self.OnClick) # note, ‘self’ is the frame
or
self.Bind(wx.EVT_BUTTON, self.OnClick) # this will catch /all/ the button clicks on the frame, unless a button has its own handler that overrides
or
self.Bind(wx.EVT_BUTTON, self.OnClick, button) # this will only catch button’s event
I personally vastly prefer ‘button.Bind(…)’, as it’s very explicit.
You can bind an event handler to any object you’d like; you can call “button.Bind(wx.EVT_BUTTON, someanyrandomobject.OnClick)”. It doesn’t care.
Now, you then are asking some cleanup questions… don’t worry about it. When you call "
button.Bind(…)", it’s just adding a record to button’s event table. Its not anything that needs cleaning up. When button goes away, the table goes away. You bind the -generator- of events to a -destination- you want called, basically. An “event handler” isn’t any sort of thing you need to keep track of and ensure survives or gets destroyed at a proper time. The button (and frame, and window, and basically everything) are the event handlers themselves. wxEvtHandler is a distant ancestor that just about everything inherits from.
I hope that’s clear. And I hope it’s all right 
–STephen