[wxPython-users] first time using styled text ctrl...

Josiah Carlson jcarlson at uci.edu
Sun Jul 2 23:30:55 PDT 2006


Jeff Peery <jeffpeery at yahoo.com> wrote:
> Ok thanks for the help, I found great docs at 
>   
>   http://www.yellowbrain.com/stc/styling.html !

Indeed, those are good docs.  I have found them to be somewhat out of
date on occasion, but your mileage may vary.

>   so here is what i am doing now:
>   
># slider scroll event
>def OnSliderScroll(self, event):     
>   # get slider value
>   start = self.Slider.GetValue()
>   # get user input length of data
>   end = start + 5
>   
>   self.styledTextCtrl1.StartStyling(start,wx.stc.STC_INDIC0_MASK)
>   self.styledTextCtrl1.SetStyling(end-start,wx.stc.STC_INDIC0_MASK)
>   self.styledTextCtrl1.IndicatorSetStyle(0,wx.stc.STC_INDIC_BOX)
>   self.styledTextCtrl1.IndicatorSetForeground(0, wx.RED)
>   
> this works well. when I move the slide bar the indicator shows and moves
> through my text.  the only problems is that I need to delete  the old
> indicator so a length of 5 indicator moves. right now if you  slide
> through all the text in the styledtextctrl there is indicator everywhere.
> I fixed this by just clearing the text with a ClearAll(), then setting
> the text again before moving the indicator again. this works but I think
> this is a bit sloppy? is there a cleaner way to clear the old indicator
> so that I don't have to keep clearing and setting all the text? maybe
> clearing all the indicator bits in each character? I tried a
> StyleClearAll() but this didn't seem to do what I wanted.

Have you tried the following:

    self.styledTextCtrl1.StartStyling(0, wx.stc.STC_INDIC0_MASK)
    self.styledTextCtrl1.SetStyling(
        self.styledTextCtrl1.GetTextLength(),
        wx.stc.STC_INDIC0_MASK)
    self.styledTextCtrl1.IndicatorSetStyle(0, wx.stc.STC_INDIC_PLAIN)


 - Josiah

> Josiah Carlson <jcarlson at uci.edu> wrote:  
> Jeff Peery  wrote:
> >  hello, I'm for the first time using a styledtxtctrl and I'm not sure  exactly how this works. I read the docs but they don't seem to start  with 'newbie' basics... nevertheless I managed to get some of the  functionality I want. I have a slider bar that I want to slide and as I  slide it a length of 5 characters is highlighted in the styled text  ctrl.... here is basically what I do now:
> >   
> >   def OnDataSliderScroll(self, event):
> >   # set start of highlighted section, use the slider value
> >   start = self.DataSlider.GetValue()
> >   end = start + 5
> >   # select the region in the styled text ctrl
> >   self.styledTextCtrl1.SetSelection(start,end)
> >   self.styledTextCtrl1.SetSelBackground(True, wx.RED)
> >   self.styledTextCtrl1.SetSelForeground(True, wx.WHITE)
> > 
> >  so this is basically what I want to do, but this won't work for me  because I have two of these sliders and I want to highlight/select two  different regions. I don't think I can select two different regions  with two different background colors. so I just need to change the  style of a group of text as the user slides the slide bar. I tried  something like this but didn't get anywhere:
> >   
> >   def OnDataSliderScroll(self, event):
> >     # create a style that I want to use to highlight a region specified by the slider
> >     self.styledTextCtrl1.StyleSetSpec(0,'fore:[wx.WHITE],back:[wx.RED]')
> >     # goto the start of the text that I want to style. the start value depends of the slider value
> >   start = self.DataSlider.GetValue()
> >     self.styledTextCtrl1.GotoPos(start)
> >   # set the style of the 5 characters after the start position, use style '0' that I specified above
> >     self.styledTextCtrl1.SetStyling(5, 0)
> 
> For the future, don't reply to a post and change the subject when
> posting about a completely different topic.  People who weren't
> interested in the parent thread may not reply to your later post.
> 
> If you didn't know already, the StyledTextCtrl is a wrapping of the
> Scintilla editor control, whose full documentation is available via
> scintilla.org, and that provide a sample editor application as SciTE.
> 
> Generally speaking, if you want to set styles and have them stick, you
> need to use the STC_LEX_CONTAINER lexer, as that will allow you to
> manually style everything.  If you use /any/ of the other lexers, the
> moment your content changes, it is reparsed and you lose your styling.
> 
> You can, however, use different indicators regardless of your lexer. 
> See: http://scintilla.sourceforge.net/ScintillaDoc.html#Indicators
> 
> You could use the INDIC_BOX or INDIC_ROUNDBOX, then set the foregrounds
> of the two boxes to be different colors.  These indicators are usable
> regardless of the lexer.
> 
>  - Josiah
> 
> 
> 
>  		
> ---------------------------------
> How low will we go? Check out Yahoo! Messenger’s low  PC-to-Phone call rates.





More information about the wxpython-users mailing list