Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在tkinter文本框中将文本的选定部分更改为不同的颜色?_Python_Tkinter_Colors_Tags - Fatal编程技术网

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

Python 在tkinter文本框中将文本的选定部分更改为不同的颜色?,python,tkinter,colors,tags,Python,Tkinter,Colors,Tags,首先,我想说的是,我不想用特殊的词语来改变与该标签相关的所有词语。我正在尝试做一些类似于在word中突出显示文本并只是更改文本颜色的事情 我有一个程序,可以通过调用键输出字典中存储的字符串。我想更改字符串中文本颜色的部分,但不一定要更改该文本的所有迭代 我不认为标记单词对我来说能起作用,因为定义我想改变颜色的所有不同单词需要很多时间,我不想改变所有的单词。 如果可以突出显示单词并单击按钮为文本着色,以及当我将文本保存到库中时,文本保留其给定的颜色。这更符合我正在努力做的事情 此外,如果可以创建某

首先,我想说的是,我不想用特殊的词语来改变与该标签相关的所有词语。我正在尝试做一些类似于在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:回答这样的问题最简单的方法就是试试看。