我一直在使用python 3.4和tkinter创建一个应用程序来解析日志和格式化数据并在文本小部件中显示结果。我想突出显示位于文本窗口中每行的已知位置的文本。我已经看到类似的突出显示问题,关于在本网站上突出显示文本小部件中的文本,这非常有用。
我的问题是我不需要搜索要突出显示的字符串或字符。我有要突出显示的位置,它可能是该位置的任何字符,包括空格。例如:我想突出显示每行的0,20,40位置(例如:指数1.0,1.20,1.40,2.0,2.20等)。
由于大文件被写入文本框,我必须为整个可滚动文本窗口执行此操作,因此我需要维护文本框行号位置。
答案 0 :(得分:0)
当引用文本小部件中的位置时,您可以附加修饰符以指示相对定位。例如,给定位置"1.0"
,下一个位置可以标识为"1.0+1c"
(或"1.0+1char"
)。因此,要突出显示给定偏移处的单个字符,请将范围的起点设为偏移量,将范围的结尾设为一个字符。
这是一个快速入侵,它采取一个或多个“位置”并突出显示每行的位置:
def highlight(text, tag, *positions):
last_line = int(text.index("end-1c").split(".")[0])
for linenumber in range(1, last_line+1):
line = text.get("%s.0" % linenumber, "%s.0 lineend-1c" % linenumber)
line_length = len(line)
for pos in positions:
if pos <= line_length:
start = "%s.%s" % (linenumber, pos)
end = start + "+1c"
text.tag_add(tag, start, end)
用法:
text = Text(...)
text.tag_configure("highlight", ...)
...
highlight(text, "highlight", 0, 20, 40)