So I just came across this issue, and it's been driving me crazy for a couple hours now...
I have a
self.phase = tk.Listbox(self, exportselection = False, selectmode='single')
def onselect(self, evt):
The "active" element is not the same as the selection, and it is updated on button release. You are correct that the active element may lag behind the current selection. The selected items are updated on button press. Actually, the updating of the active element on a button click isn't documented, so it may be platform specific. The active element is mostly for navigating the listbox with the keyboard, and isn't particularly relevant when using the mouse.
If you care about getting the item that is selected, use
curselection. If you truly care about the active element you'll have to bind to
<ButtonRelease> and arrange the bindtags so that your binding happens after the tkinter class binding.