My guess is that clicking on a collection causes a pick event to be returned by the collection itself and also perhaps by the barh member in the collection.  No idea if that's the case, but just for the record, I figured out a simple enough workaround in which the pick handler is disconnected to open a wxPython popup window.  Once that window is closed, the pick handler is reconnected:

    self.evt_bind = self.canvas.mpl_connect('pick_event', self.on_pick)
    . . . .
    def on_pick(self, event):
        if type(event.artist) == brokenbarh:
            self.canvas.mpl_disconnect(self.evt_bind)
            popup = popupwin(self, event.mouseevent.xdata, event.mouseevent.ydata)
            popup.Popup()

class popupwin(wx.PopupTransientWindow):
    def __init__(self, plot, x_coord, y_coord):
        wx.PopupTransientWindow.__init__(self, plot)
        self.plot = plot
        text = st.gen(self, 'hello')
    
    def OnDismiss(self):
        self.plot.evt_bind = self.plot.canvas.mpl_connect('pick_event', self.plot.on_pick


On Sun, Jun 22, 2008 at 1:18 AM, Paul Hartley <phartley@gmail.com> wrote:

If I click on a bar that is part of a broken_barh collection which has its picker attribute enabled, there appears to be two events generated for example:

    def on_pick(self, event):
        print event.mouseevent.xdata
        print event.mouseevent.ydata

clicking on a bar will cause this method to be executed twice, hence I get something like this if I click just once:

5575.97222222
0.0277777777778
5575.97222222
0.0277777777778

Is there a workaround such that the method is executed only once?