The main idea here is that you have a set of widgets; each one of those
widgets fires an event when its content, position, value etc. changes.
But the event type differs by widget. For instance you would bind a
handler to wx.EVT_TEXT to catch changes to a wx.TextCtrl, wx.EVT_SLIDER
to catch changes to the value of a wx.Slider, and the list goes on.
So, the basic idea is to find the events which correspond to the types
of widgets you're using, and bind handlers to them which set a flag
inside your application saying "hey, the user made a change". Call it
unsavedChanges or something along those lines and make it a boolean.
When they edit a value, set it to True. Catch the wx.EVT_CLOSE event so
that when the user tries to exit, you can check the flag and alert them
appropriately. Once they actually save the data, e.g. by pressing
Ctrl+S or whatever mechanism you give them, set the flag back to False.
Regards,
James Scholes
https://twitter.com/JamesScholes