Python 在tkinter文本框中将文本的选定部分更改为不同的颜色?
首先,我想说的是,我不想用特殊的词语来改变与该标签相关的所有词语。我正在尝试做一些类似于在word中突出显示文本并只是更改文本颜色的事情 我有一个程序,可以通过调用键输出字典中存储的字符串。我想更改字符串中文本颜色的部分,但不一定要更改该文本的所有迭代 我不认为标记单词对我来说能起作用,因为定义我想改变颜色的所有不同单词需要很多时间,我不想改变所有的单词。 如果可以突出显示单词并单击按钮为文本着色,以及当我将文本保存到库中时,文本保留其给定的颜色。这更符合我正在努力做的事情 此外,如果可以创建某种规则来查找一组字符,然后获取这些字符中的所有内容并更改颜色,则可以执行更多操作 我可以写一些东西来读取字典中的数据并查找标识符吗?让我们称它为Python 在tkinter文本框中将文本的选定部分更改为不同的颜色?,python,tkinter,colors,tags,Python,Tkinter,Colors,Tags,首先,我想说的是,我不想用特殊的词语来改变与该标签相关的所有词语。我正在尝试做一些类似于在word中突出显示文本并只是更改文本颜色的事情 我有一个程序,可以通过调用键输出字典中存储的字符串。我想更改字符串中文本颜色的部分,但不一定要更改该文本的所有迭代 我不认为标记单词对我来说能起作用,因为定义我想改变颜色的所有不同单词需要很多时间,我不想改变所有的单词。 如果可以突出显示单词并单击按钮为文本着色,以及当我将文本保存到库中时,文本保留其给定的颜色。这更符合我正在努力做的事情 此外,如果可以创建某
clrg*
,然后查找结束标识符,让我们称它为clrGr**
,然后标识符中的任何文本或字符串都会变为绿色。通过调用标签或类似的东西
clrGr* Just random string of text between the identifiers clrGr**
我目前得到的只允许我更改文本的所有颜色。
现在我想做的是在我的tkinter文本框中显示如下内容。
通过正则表达式应用标记
文本小部件支持查找正则表达式指定的文本范围
注意:表达式必须紧跟其后,这与python正则表达式略有不同
例如:
import tkinter as tk
root = tk.Tk()
text = tk.Text(root)
text.pack(fill="both", expand=True)
text.tag_configure("highlight", foreground="green")
text.insert("1.0", '''
blah blah
blah clrGr* Just random string of text between the identifiers clrGr** blah
blah blah
''')
# this just highlights the first match, but you can put this code
# in a loop to highlight the whole file
char_count = tk.IntVar()
index = text.search(r'(?:clrGr\*).*(?:clrGr\*\*)', "1.0", "end", count=char_count, regexp=True)
# we have to adjust the character indexes to skip over the identifiers
if index != "":
start = "%s + 6 chars" % index
end = "%s + %d chars" % (index, char_count.get()-7)
text.tag_add("highlight", start, end)
root.mainloop()
保存颜色信息
但是,您可以在文本小部件上调用dump
方法来获取描述文本小部件内容的元组列表。您可以使用此信息直接写入文件(采用只有应用程序才能理解的格式),也可以将数据转换为已知格式
tcl/tk手册页中描述了
dump
方法返回内容的最佳描述:@Bryan Oalkey
所有这些看起来都很有趣。当我明天回去工作时,我会更仔细地研究它,看看根据你提供的信息我能想出什么。一旦我取得了一些进展,我会在这里发帖。@Bryan Oalkey
所以我的标签工作正常,我想知道是否有一种方法可以在不让标签可见的情况下标记文本。或者,如果我可以在高亮显示发生后删除标记。@BaconTech:如果您不使用任何属性配置标记,它们将不可见。这会同时删除标记内的所有内容吗?我只想删除标识符本身。@BaconTech:回答这样的问题最简单的方法就是试试看。