Dynamic text color

Dave McCormick mackrackit at gmail.com
Tue Jan 5 16:31:09 CET 2010



John Posner wrote:
> On Fri, 01 Jan 2010 21:01:04 -0500, Cousin Stanley 
> <cousinstanley at gmail.com> wrote:
>
> <snip>
>>
>>     I was not familiar with the re.finditer method
>>     for searching strings ...
>
> Stanley and Dave --
>
> So far, we've just been using finditer() to perform standard-string 
> searches (e.g. on the word "red"). Since Dave now wants to color 
> multiple words the same color (e.g. the words in redList), we can use 
> a single regular-expression search to locate *all* the words in a 
> list. This eliminates the need to use a "for" loop to handle the list. 
> Here's what I mean:
>
>  >>> import re
>  >>> s = "it is neither red nor crimson, but scarlet, you see"
>
> ########## individual searches
>
>  >>> [matchobj.span() for matchobj in re.finditer("red", s)]
>  [(14, 17)]
>  >>> [matchobj.span() for matchobj in re.finditer("crimson", s)]
>  [(22, 29)]
>  >>> [matchobj.span() for matchobj in re.finditer("scarlet", s)]
>  [(35, 42)]
>
> ########## one "swell foop"
>
>  >>> redList = "red crimson scarlet".split()
>  >>> redList_regexp = "|".join(redList)
>  >>> redList_regexp
>  'red|crimson|scarlet'
>  >>> [matchobj.span() for matchobj in re.finditer(redList_regexp, s)]
>  [(14, 17), (22, 29), (35, 42)]
>
> -John
Thanks again John,
This is fun!!!
I made a "red.text" file to hold the "red words", they are separated by 
a space in the file.
Still need to add the extra parameter "color" someplace. But this is 
what I have so far.
##############
file = 'red.txt'
file = open("red.txt","r")
rList = file.readlines()
file.close()
redList = str(rList).split()
blueList = "blue ball".split()
greenList = "green grass".split()
def get_complete_text(event):
    complete_text = Tbox.get("1.0", END)
    Tbox.tag_remove("red", "1.0", END)
    Tbox.tag_remove("blue", "1.0", END)
    Tbox.tag_remove("green", "1.0", END)
####RED########
    redList_regexp = "|".join(redList)
    for matchobj in re.finditer(redList_regexp, complete_text):
        start,end = matchobj.span()
        Tbox.tag_add("red", "1.0 + %d chars" % start,"1.0 + %d chars" % end)
    Tbox.tag_config("red", foreground="red")
####BLUE#######
    blueList_regexp = "|".join(blueList)
    for matchobj in re.finditer(blueList_regexp, complete_text):
        start,end = matchobj.span()
        Tbox.tag_add("blue", "1.0 + %d chars" % start,"1.0 + %d chars" % 
end)
    Tbox.tag_config("blue", foreground="blue")
####GREEN#######
    greenList_regexp = "|".join(greenList)
    for matchobj in re.finditer(greenList_regexp, complete_text):
        start,end = matchobj.span()
        Tbox.tag_add("green", "1.0 + %d chars" % start,"1.0 + %d chars" 
% end)
    Tbox.tag_config("green", foreground="green")



More information about the Python-list mailing list