[wxPython] how to erase the text?

Yes, it works. Thanks again for your help.

Jenny

···

From: Raul Cota <cota@ucalgary.ca>
Reply-To: wxpython-users@lists.wxwindows.org
To: wxpython-users@lists.wxwindows.org
Subject: Re: [wxPython] how to erase the text?
Date: Tue, 26 Jun 2001 15:35:50 -0600

I'm assuming that all you want is to keep the TextCtrl from getting more
than 4 characters.
If I'm right.... What I would do is....

self.extension = wxTextCtrl(panel, ID_EXTENSION, "")
EVT_TEXT(self, ID_EXTENSION, self.check)
EVT_CHAR(self.extension, self.EvtChar)

def EvtChar(self, event):
        k = event.GetKeyCode()
        if self.extension.GetLineLength(0) != 4:
            event.Skip()
        else:
            # 8 = backspace
            # 13 = enter
            # 27 = esc
            if k == 8 or k == 13 or k == 27:
                event.Skip()
            else:
  #If the length is already 4, I don't write the line
  #event.Skip() and the character is not written
                print 'error'

def check(self, event):
        #Whatever you want here
pass

The EVT_CHAR event is ran before the EVT_TEXT event. And if you don't
write the line event.Skip(), the EVT_TEXT event is not ran at all, thus
the character pressed won't appear on the text control.
In this example I aloud the "backspace", "enter", and "esc" keys to be
passes to the control even if the length of the control is already 4.
That way you can still edit the text.

I use this set of events for something different (I give my own behavior
to an enter and the arrow keys) but I think it could help you if that's
what you are trying to do.

qun liu wrote:
>
> Hi,
>
> I am trying to repaint the wxTextCtrl when the length of the input text is
> more than four, but Refresh() didn't work here. Could somebody give me any
> suggestion? Thanks.
>
> Jenny
>
> #------------------------------------------------------
> self.extension = wxTextCtrl(panel, ID_EXTENSION, "")
> EVT_TEXT(self, ID_EXTENSION, self.check)
> def check(self, event):
> text = self.extension.GetValue()
> if (len(text) > 4 ):
> print "error"
> self.extension.Refresh(true)
>
> _________________________________________________________________
> Get your FREE download of MSN Explorer at http://explorer.msn.com
>
> _______________________________________________
> wxpython-users mailing list
> wxpython-users@lists.wxwindows.org
> http://lists.wxwindows.org/mailman/listinfo/wxpython-users

_______________________________________________
wxpython-users mailing list
wxpython-users@lists.wxwindows.org
http://lists.wxwindows.org/mailman/listinfo/wxpython-users

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

Jenny

Sorry, just one more thing... I was thinking about it and there is a
bug with the code I gave you... if the user uses copy and paste to set
the value to text ctrl, then the EVT_CHAR event won't be triggered. So
maybe you still want to re-check the length of the line in the EVT_TEXT
event and handle it accordingly... perhaps...

self.extension.SetValue("")

or

txt = self.extension.GetValue()
self.extension.SetValue(txt[:4]) #Write only the first 4 characters

Raul

qun liu wrote:

···

Yes, it works. Thanks again for your help.

Jenny

>From: Raul Cota <cota@ucalgary.ca>
>Reply-To: wxpython-users@lists.wxwindows.org
>To: wxpython-users@lists.wxwindows.org
>Subject: Re: [wxPython] how to erase the text?
>Date: Tue, 26 Jun 2001 15:35:50 -0600
>
>
>I'm assuming that all you want is to keep the TextCtrl from getting more
>than 4 characters.
>If I'm right.... What I would do is....
>
>self.extension = wxTextCtrl(panel, ID_EXTENSION, "")
>EVT_TEXT(self, ID_EXTENSION, self.check)
>EVT_CHAR(self.extension, self.EvtChar)
>
>def EvtChar(self, event):
> k = event.GetKeyCode()
> if self.extension.GetLineLength(0) != 4:
> event.Skip()
> else:
> # 8 = backspace
> # 13 = enter
> # 27 = esc
> if k == 8 or k == 13 or k == 27:
> event.Skip()
> else:
> #If the length is already 4, I don't write the line
> #event.Skip() and the character is not written
> print 'error'
>
>def check(self, event):
> #Whatever you want here
> pass
>
>The EVT_CHAR event is ran before the EVT_TEXT event. And if you don't
>write the line event.Skip(), the EVT_TEXT event is not ran at all, thus
>the character pressed won't appear on the text control.
>In this example I aloud the "backspace", "enter", and "esc" keys to be
>passes to the control even if the length of the control is already 4.
>That way you can still edit the text.
>
>I use this set of events for something different (I give my own behavior
>to an enter and the arrow keys) but I think it could help you if that's
>what you are trying to do.
>
>
>qun liu wrote:
> >
> > Hi,
> >
> > I am trying to repaint the wxTextCtrl when the length of the input text
>is
> > more than four, but Refresh() didn't work here. Could somebody give me
>any
> > suggestion? Thanks.
> >
> > Jenny
> >
> > #------------------------------------------------------
> > self.extension = wxTextCtrl(panel, ID_EXTENSION, "")
> > EVT_TEXT(self, ID_EXTENSION, self.check)
> > def check(self, event):
> > text = self.extension.GetValue()
> > if (len(text) > 4 ):
> > print "error"
> > self.extension.Refresh(true)
> >
> > _________________________________________________________________
> > Get your FREE download of MSN Explorer at http://explorer.msn.com
> >
> > _______________________________________________
> > wxpython-users mailing list
> > wxpython-users@lists.wxwindows.org
> > http://lists.wxwindows.org/mailman/listinfo/wxpython-users
>
>_______________________________________________
>wxpython-users mailing list
>wxpython-users@lists.wxwindows.org
>http://lists.wxwindows.org/mailman/listinfo/wxpython-users

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

_______________________________________________
wxpython-users mailing list
wxpython-users@lists.wxwindows.org
http://lists.wxwindows.org/mailman/listinfo/wxpython-users