我使用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()
(这是使用正则表达式:“红色汽车”:)
答案 0 :(得分:2)
要删除标记的效果,请从字符范围中删除标记。您可以使用tag_remove删除标记,为其指定要从中删除标记的起始和结束范围。
例如,要从整个文档中删除"search"
标记,请执行以下操作:
self.tag_remove("search", "1.0", "end")