Tkinter 从语法突出显示中清除格式

Tkinter clearing formatting from syntax highlighting

我使用 Tkinter 在 Python 中实现了语法突出显示。比如我可以让它自动高亮"derp"。问题是,当我将字符串修改为 "dERP" 或类似的东西时,它仍会突出显示 "d" (也就是唯一剩下的原始字符)。我如何清除此格式?我考虑过创建一个标签,将整个文档的背景设置为白色,但这会导致突出显示问题。

代码:

from Tkinter import *
import sys, os

class easyTex(Text):
    def __init__(self,base,**args):
        Text.__init__(self,base,**args)
        self.tag_configure("default", background="white")
        self.tag_configure("search", background="blue")

    def highlightPattern(self, pattern, tag):
        start       = "1.0"
        countVar    = StringVar()
        while True:
            pos = self.search(pattern, start, stopindex="end", count=countVar, regexp=True)
            if not pos: break
            self.tag_add(tag, pos, "%s+%sc" % (pos, countVar.get()))
            start = "%s+%dc" % (pos, int(countVar.get()) + 1)

    def highlightSyntax(self):
        self.highlightPattern(".*", "default")
        self.highlightPattern("a red car", "search")

base = Tk()
editor = easyTex(base)

base.bind("<Escape>", lambda e: sys.exit())
base.bind("<Key>", lambda e: editor.highlightSyntax())

editor.pack(fill=BOTH, expand=1)

base.call('wm', 'attributes', '.', '-topmost', True)
mainloop()

(这是使用正则表达式:"a red car":)

要删除标签的效果,请从字符范围中删除标签。您可以使用 tag_remove 删除标签,为其提供您希望从中删除标签的开始和结束范围。

例如,要从整个文档中删除 "search" 标签,请执行以下操作:

self.tag_remove("search", "1.0", "end")