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")
我使用 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")