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

时间:2015-04-10 18:33:35

标签: python regex tkinter 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()

(这是使用正则表达式:“红色汽车”:)

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

要删除标记的效果,请从字符范围中删除标记。您可以使用tag_remove删除标记,为其指定要从中删除标记的起始和结束范围。

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

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