import wx
from wx.lib.floatcanvas import FloatCanvas

class TestFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.canvas =FloatCanvas.FloatCanvas(self, BackgroundColor = "DARK SLATE BLUE")
        MainSizer = wx.BoxSizer(wx.VERTICAL)
        MainSizer.Add(self.canvas, 4, wx.EXPAND)
        self.SetSizer(MainSizer)
        self.canvas.Bind(FloatCanvas.EVT_LEFT_DOWN, self.OnLeftDown)
        A = self.canvas.AddRectangle((10,10), (100, 20), FillColor="red")
        A.Bind(FloatCanvas.EVT_FC_LEFT_DOWN, self.OnRectDown)
        A.Bind(FloatCanvas.EVT_FC_LEFT_UP, self.OnRectUp)    #  Comment this line, no more crash
        wx.CallAfter(self.canvas.ZoomToBB)
                       
    def OnLeftDown(self, event):
        print 'Left Button down clicked at:', event.Coords
       
    def OnRectDown(self, event):
        print 'Rectangle: Left Button down clicked at:', event.HitCoords
        self.canvas.CaptureMouse()
       
    def OnRectUp(self, event):
        print 'Rectangle: Left Button up clicked at:', event.HitCoords
        if self.canvas.HasCapture():
            self.canvas.ReleaseMouse()

app = wx.App(0)
frame = TestFrame(None, title = "Mouse Event Tester")
frame.Show(True)
app.MainLoop()

