-
-import wx
-
-
-# This class is just an experiment to see how easy it would be to
-# handle simulating transfer of ownership of object to a 'parent'
-# object, and then automatically calling Destroy on those when the
-# parent is destroyed. Conclusion: It's not too hard at all. Now,
-# what should I do with it...
-class DestroyWrapper(object):
- def __init__(self):
- import weakref
- self.items = weakref.WeakValueDictionary()
-
- def AddItem(self, obj):
- self.items[len(self.items)+1] = obj
-
- def __del__(self):
- for item in self.items.values():
- item.Destroy()
-
-
-
-
-
-class MyEvtHandler(wx.EvtHandler):
- instCount = 0
-
- def __init__(self):
- wx.EvtHandler.__init__(self)
- MyEvtHandler.instCount += 1
- self.cnt = MyEvtHandler.instCount
- self.Bind(wx.EVT_CHECKBOX, self.OnCheckBox)
-
- def __del__(self):
- print "%02d: deleted" % self.cnt
-
- def OnCheckBox(self, evt):
- print "%02d: %s" % (self.cnt, evt.IsChecked())
- evt.Skip()
-
-
-
-class MyFrame(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, title="wx.EvtHandler Test")
- p = wx.Panel(self)
-
- pushBtn = wx.Button(p, -1, "Push EvtHandler", (20,20))
- popBtn = wx.Button(p, -1, "Pop EvtHandler", (20,60))
-
- checkBox = wx.CheckBox(p, -1, "Test EvtHandler", (200, 25))
-
- self.Bind(wx.EVT_BUTTON, self.OnPushBtn, pushBtn)
- self.Bind(wx.EVT_BUTTON, self.OnPopBtn, popBtn)
-
-## self.dw = DestroyWrapper()
-
-
- def OnPushBtn(self, evt):
- eh = MyEvtHandler()
- self.PushEventHandler(eh)
-## self.dw.AddItem(eh)
- print "%02d: pushed" % eh.cnt
-
-
- def OnPopBtn(self, evt):
- eh = self.GetEventHandler()
- if eh.this == self.this:
- print "All already popped!"
- else:
- eh = self.PopEventHandler()
- print "%02d: popped( %s )" % (eh.cnt, eh.__class__)
- eh.Destroy()
-
-
-
-app = wx.App(False)
-frm = MyFrame()
-frm.Show()
-app.MainLoop()