[wxPython-users] EVT_TEXT_URL event is fired many times

Werner F. Bruhin werner.bruhin at free.fr
Thu Jul 5 01:13:14 PDT 2007


Hi Robin,

Robin Dunn wrote:
> Werner F. Bruhin wrote:
>> I am just experimenting with this and I always get multiple events =

>> fired when I click once on a link.
>>
>> Is this a known issue, or am I doing something wrong?
>
> I don't recall hearing anything about this.  Do you call event.Skip() =

> in the handler?
No I don't.

Attached is a small sample with both a wx.TextCtrl and =

wx.lib.masked.TextCtrl and both show the same problem, i.e. clicking =

ones on the control fires the event multiple times.

BTW, I work around it by storing the last url and if it is the same I =

just ignore it.

Werner

-------------- next part --------------
#Boa:Frame:Frame1

import wx
import wx.lib.masked.textctrl

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, =

] =3D [wx.NewId() for _init_ctrls in range(3)]

class Frame1(wx.Frame):
    def _init_coll_flexGridSizer1_Items(self, parent):
        # generated method, don't edit

        parent.AddWindow(self.textCtrl1, 0, border=3D0, flag=3Dwx.EXPAND)
        parent.AddWindow(self.textCtrl2, 0, border=3D0, flag=3Dwx.EXPAND)

    def _init_coll_flexGridSizer1_Growables(self, parent):
        # generated method, don't edit

        parent.AddGrowableCol(0)

    def _init_sizers(self):
        # generated method, don't edit
        self.flexGridSizer1 =3D wx.FlexGridSizer(cols=3D1, hgap=3D0, rows=
=3D0, vgap=3D0)

        self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
        self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)

        self.SetSizer(self.flexGridSizer1)

    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=3DwxID_FRAME1, name=3D'', parent=3Dprnt,
              pos=3Dwx.Point(614, 279), size=3Dwx.Size(248, 123),
              style=3Dwx.DEFAULT_FRAME_STYLE, title=3D'Frame1')
        self.SetClientSize(wx.Size(232, 87))

        self.textCtrl1 =3D wx.TextCtrl(id=3DwxID_FRAME1TEXTCTRL1, name=3D't=
extCtrl1',
              parent=3Dself, pos=3Dwx.Point(0, 0), size=3Dwx.Size(232, 21),
              style=3Dwx.TE_AUTO_URL, value=3D'')
        self.textCtrl1.Bind(wx.EVT_TEXT_URL, self.OnTextCtrl1TextUrl,
              id=3DwxID_FRAME1TEXTCTRL1)

        self.textCtrl2 =3D wx.lib.masked.textctrl.TextCtrl(id=3DwxID_FRAME1=
TEXTCTRL2,
              name=3D'textCtrl2', parent=3Dself, pos=3Dwx.Point(0, 21),
              size=3Dwx.Size(232, 21), style=3Dwx.TE_AUTO_URL, value=3D'')
        self.textCtrl2.SetMask('X{50}')
        self.textCtrl2.Bind(wx.EVT_TEXT_URL, self.OnTextCtrl2TextUrl,
              id=3DwxID_FRAME1TEXTCTRL2)

        self._init_sizers()

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.textCtrl1.SetValue('http://www.python.org')
        self.textCtrl2.SetValue('http://www.wxpython.org')

    def OnTextCtrl1TextUrl(self, event):
        print 'ctrl 1 url: %s' % event.GetEventObject().GetValue()

    def OnTextCtrl2TextUrl(self, event):
        print 'ctrl 2 url: %s' % event.GetEventObject().GetValue()


if __name__ =3D=3D '__main__':
    app =3D wx.PySimpleApp()
    frame =3D create(None)
    frame.Show()

    app.MainLoop()


More information about the wxpython-users mailing list