1999-11-07 02:49:09 -05:00
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
import sys
|
|
|
|
|
|
|
|
import wx
|
1999-11-07 02:49:09 -05:00
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
# This shows the new 'official' way to do custom events as derived
|
|
|
|
# from the wxPython 2.5 migration guide.
|
|
|
|
|
|
|
|
#######################################################\
|
|
|
|
# *** Old and busted *** |
|
|
|
|
# |
|
|
|
|
# myEVT_BUTTON_CLICKPOS = wx.NewEventType() |
|
|
|
|
# |
|
|
|
|
# def EVT_BUTTON_CLICKPOS(win, id, func): |
|
|
|
|
# win.Connect(id, -1, myEVT_BUTTON_CLICKPOS, func) |
|
|
|
|
#######################################################/
|
1999-11-07 02:49:09 -05:00
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
#############################\
|
|
|
|
# *** The new Hottness *** |
|
|
|
|
#############################/
|
|
|
|
myEVT_BUTTON_CLICKPOS = wx.NewEventType()
|
|
|
|
EVT_BUTTON_CLICKPOS = wx.PyEventBinder(myEVT_BUTTON_CLICKPOS, 1)
|
1999-11-07 02:49:09 -05:00
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
#----------------------------------------------------------------------
|
1999-11-07 02:49:09 -05:00
|
|
|
|
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
class MyEvent(wx.PyCommandEvent):
|
1999-11-07 02:49:09 -05:00
|
|
|
def __init__(self, evtType, id):
|
2003-12-08 20:23:28 -05:00
|
|
|
wx.PyCommandEvent.__init__(self, evtType, id)
|
1999-11-07 02:49:09 -05:00
|
|
|
self.myVal = None
|
|
|
|
|
|
|
|
#def __del__(self):
|
|
|
|
# print '__del__'
|
2003-12-08 20:23:28 -05:00
|
|
|
# wx.PyCommandEvent.__del__(self)
|
1999-11-07 02:49:09 -05:00
|
|
|
|
|
|
|
def SetMyVal(self, val):
|
|
|
|
self.myVal = val
|
|
|
|
|
|
|
|
def GetMyVal(self):
|
|
|
|
return self.myVal
|
|
|
|
|
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
class MyButton(wx.Button):
|
1999-11-07 02:49:09 -05:00
|
|
|
def __init__(self, parent, id, txt, pos):
|
2003-12-08 20:23:28 -05:00
|
|
|
wx.Button.__init__(self, parent, id, txt, pos)
|
|
|
|
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
|
1999-11-07 02:49:09 -05:00
|
|
|
|
|
|
|
def OnLeftDown(self, event):
|
|
|
|
pt = event.GetPosition()
|
|
|
|
evt = MyEvent(myEVT_BUTTON_CLICKPOS, self.GetId())
|
|
|
|
evt.SetMyVal(pt)
|
|
|
|
#print id(evt), sys.getrefcount(evt)
|
|
|
|
self.GetEventHandler().ProcessEvent(evt)
|
|
|
|
#print id(evt), sys.getrefcount(evt)
|
|
|
|
event.Skip()
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
class TestPanel(wx.Panel):
|
1999-11-07 02:49:09 -05:00
|
|
|
def __init__(self, parent, log):
|
2003-12-08 20:23:28 -05:00
|
|
|
wx.Panel.__init__(self, parent, -1)
|
1999-11-07 02:49:09 -05:00
|
|
|
self.log = log
|
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
b = MyButton(self, -1, " Click me ", (30,30))
|
|
|
|
self.Bind(wx.EVT_BUTTON, self.OnClick, id=b.GetId())
|
|
|
|
|
|
|
|
# This is our custom event binder created above.
|
|
|
|
self.Bind(EVT_BUTTON_CLICKPOS, self.OnMyEvent, id=b.GetId())
|
1999-11-07 02:49:09 -05:00
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
wx.StaticText(
|
|
|
|
self, -1, "Please see the Overview and Demo Code for details...",
|
|
|
|
(30, 80)
|
|
|
|
)
|
1999-11-07 02:49:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
def OnClick(self, event):
|
|
|
|
self.log.WriteText("OnClick\n")
|
|
|
|
|
|
|
|
def OnMyEvent(self, event):
|
|
|
|
#print id(event), sys.getrefcount(event)
|
|
|
|
self.log.WriteText("MyEvent: %s\n" % (event.GetMyVal(), ) )
|
|
|
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
def runTest(frame, nb, log):
|
|
|
|
win = TestPanel(nb, log)
|
|
|
|
return win
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
overview = """\
|
2003-12-08 20:23:28 -05:00
|
|
|
This demo is a contrived example of defining an event class in wxPython and
|
|
|
|
sending it up the containment hierarchy for processing.
|
1999-11-07 02:49:09 -05:00
|
|
|
|
2003-12-08 20:23:28 -05:00
|
|
|
V2.5 note: this demo also shows the new style of creating event binders that
|
|
|
|
is required if you used the *.Bind() method of setting up event handlers.
|
|
|
|
"""
|
2003-07-02 19:13:10 -04:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
import sys,os
|
|
|
|
import run
|
|
|
|
run.main(['', os.path.basename(sys.argv[0])])
|
|
|
|
|