mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-06 12:00:13 +01:00
Copy the wxPython demo from Classic
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxPython/Phoenix/trunk@74164 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
108
demo/PythonEvents.py
Normal file
108
demo/PythonEvents.py
Normal file
@@ -0,0 +1,108 @@
|
||||
|
||||
import sys
|
||||
|
||||
import wx
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
# 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) |
|
||||
#######################################################/
|
||||
|
||||
#############################\
|
||||
# *** The new Hottness *** |
|
||||
#############################/
|
||||
myEVT_BUTTON_CLICKPOS = wx.NewEventType()
|
||||
EVT_BUTTON_CLICKPOS = wx.PyEventBinder(myEVT_BUTTON_CLICKPOS, 1)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
class MyEvent(wx.PyCommandEvent):
|
||||
def __init__(self, evtType, id):
|
||||
wx.PyCommandEvent.__init__(self, evtType, id)
|
||||
self.myVal = None
|
||||
|
||||
#def __del__(self):
|
||||
# print '__del__'
|
||||
# wx.PyCommandEvent.__del__(self)
|
||||
|
||||
def SetMyVal(self, val):
|
||||
self.myVal = val
|
||||
|
||||
def GetMyVal(self):
|
||||
return self.myVal
|
||||
|
||||
|
||||
class MyButton(wx.Button):
|
||||
def __init__(self, parent, id, txt, pos):
|
||||
wx.Button.__init__(self, parent, id, txt, pos)
|
||||
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
|
||||
|
||||
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()
|
||||
|
||||
|
||||
|
||||
class TestPanel(wx.Panel):
|
||||
def __init__(self, parent, log):
|
||||
wx.Panel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
|
||||
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())
|
||||
|
||||
wx.StaticText(
|
||||
self, -1, "Please see the Overview and Demo Code for details...",
|
||||
(30, 80)
|
||||
)
|
||||
|
||||
|
||||
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 = """\
|
||||
This demo is a contrived example of defining an event class in wxPython and
|
||||
sending it up the containment hierarchy for processing.
|
||||
|
||||
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.
|
||||
"""
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys,os
|
||||
import run
|
||||
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|
||||
|
||||
Reference in New Issue
Block a user