解释Tkinter文本搜索方法

min*_*als 7 python search tkinter tkinter.text

我不太明白text.search方法是如何工作的.例如,有一句话:Today a red car appeared in the park.我需要找到a red car序列并突出显示它.它被发现,但这是我突出显示的样子:

在此输入图像描述

在此输入图像描述

我正在使用self.text.search(word, start, stopindex=END)这句话.看起来搜索方法与python的regexp搜索完全相同.添加exact=True没有改变任何东西,因为它是默认行为,这就是为什么我不明白究竟是什么究竟真实的意思.如何a red car正确突出显示?

Bry*_*ley 10

搜索方法返回起始索引处或之后的第一个匹配的索引,以及可选的匹配字符数.您有责任使用此信息突出显示所发现的内容.

例如,请考虑以下搜索:

countVar = tk.StringVar()
pos = text.search("a red car", "1.0", stopindex="end", count=countVar)
Run Code Online (Sandbox Code Playgroud)

如果找到匹配项,pos将包含匹配项的第一个字符的索引,并将包含匹配countVar的字符数.您可以使用此信息通过使用"index + N chars"形式的索引或缩写"index + Nc"来突出显示匹配.例如,如果pos为2.6且count为9,则匹配的最后一个字符的索引将为2.6+9c

有了它,并假设您已经配置了一个名为"search"的标签(例如:) text.tag_configure("search", background="green"),您可以将此标签添加到匹配的开头和结尾,如下所示:

text.tag_add("search", pos, "%s + %sc" (pos, countVar.get()))
Run Code Online (Sandbox Code Playgroud)

要突出显示所有匹配项,只需将搜索命令放在循环中,并将起始位置调整为超过上一个匹配结束的一个字符.