在tkinter文本框中将文本的选择部分更改为不同的颜色?

时间:2017-04-05 18:21:48

标签: python tkinter colors tags

首先,我想说我不打算采用空格词并更改与该标签相关的所有单词。我正在尝试做一些类似于突出显示单词中的文本而只是更改文本颜色的内容。

我有一个程序会通过调用键输出存储在字典中的字符串。我想在字符串中更改文本颜色的部分,但不一定要更改该文本的所有迭代。

我不认为标记单词会对我有用,因为它需要花费大量时间来定义我想要更改颜色的所有不同单词,并且我不希望所有单词都被更改。 如果可以突出显示单词并单击按钮为文本着色以及将文本保存到库时文本保留其给定的颜色。这更像是我想做的事情。

此外,如果可以创建某种规则来查找一组字符,然后将这些字符中的所有内容都更改并更改颜色。

我可以编写一些能够读取字典中数据的内容并查找标识符,然后调用它clrGr*然后查找结束标识符,让我们调用它clrGr**,然后调用任何文本或字符串标识符内部将更改为绿色。通过调用标签或类似的东西。

clrGr* Just random string of text between the identifiers clrGr**

我目前只能让我改变文本的所有颜色。 enter image description here

现在我要做的是在我的tkinter文本框中显示以下内容。 enter image description here

1 个答案:

答案 0 :(得分:1)

通过正则表达式应用标签

文本小部件支持查找正则表达式指定的文本范围。

注意:表达式必须遵循tcl regular expression syntax,这与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方法返回的最佳描述:http://tcl.tk/man/tcl8.6/TkCmd/text.htm#M108