Python 3 个 Tkinter |在文本小部件中为“:”之间的单词更改 color/style
Python 3 Tkinter | Change color/style for words in between ':' in Text Widget
假设我们有这段文字:
text = "You don't need to try to find hidden meaning:\nin this text :sun_with_face:!\nthis text : does not have any :meaning :D"
现在注意到上面文字中的 :sun_with_face:
了吗?这就是我试图通过将文本小部件的粗体和颜色更改为特定部分来以某种方式突出显示的内容。
问题:
如何过滤:these_words:
的文本?你可能会注意到那些是 emoji.demojized()
表情符号,所以一个可选的解决方案是突出显示 emoji.UNICODE_EMOJI
列表中的所有单词,但我觉得它会占用大量资源和时间(因为列表包含超过 1000 项)
如何突出显示想要的内容。尽管我们可能会以某种方式解决第一个问题,但这些 demojized 表情符号位于文本中间...
编辑
澄清一下:我知道如何突出显示 this question 中的文本。我只需要知道单词的位置以突出显示它,这是棘手的部分。还有:sun_with_face:。它可以是任何东西,只要它用':'打开和关闭,中间有 no 空格 (</code>) 和换行符 (<code>\n
).
我想您要问的是如何将突出显示应用于以冒号开头、具有某种文本跨度并以冒号结尾的文本。您可以使用文本小部件 search
方法找到与该模式匹配的文本,并且可以使用文本小部件的标记功能应用突出显示。
由于您要根据模式进行搜索,因此需要使用正则表达式搜索。您可以通过在调用 search
方法时将 regexp
设置为 True
来实现。因为模式可以是任意长度,所以你还需要传入一个变量,这样 tkinter 就可以 return 它匹配了多少个字符。您可以使用此信息来应用突出显示。
注意:使用正则表达式搜索时,表达式必须跟在 Tcl regular expression syntax 之后,而不是 python 之后。有一些细微的差别。
下面的示例查找冒号后紧接最短的非空白字符组和冒号的所有匹配项。然后它将标签 "highlight" 添加到每个匹配项:
countVar = tk.IntVar()
start_index = "1.0"
while start_index:
index = text_widget.search(r':\S+?:', start_index, stopindex="end",
count=countVar, regexp=True)
if index:
# ie: a match was found
end_index = "{} + {} chars".format(index, countVar.get())
text_widget.tag_add("highlight", index, end_index)
start_index = end_index
else:
start_index = None
假设我们有这段文字:
text = "You don't need to try to find hidden meaning:\nin this text :sun_with_face:!\nthis text : does not have any :meaning :D"
现在注意到上面文字中的 :sun_with_face:
了吗?这就是我试图通过将文本小部件的粗体和颜色更改为特定部分来以某种方式突出显示的内容。
问题:
如何过滤
:these_words:
的文本?你可能会注意到那些是emoji.demojized()
表情符号,所以一个可选的解决方案是突出显示emoji.UNICODE_EMOJI
列表中的所有单词,但我觉得它会占用大量资源和时间(因为列表包含超过 1000 项)如何突出显示想要的内容。尽管我们可能会以某种方式解决第一个问题,但这些 demojized 表情符号位于文本中间...
编辑
澄清一下:我知道如何突出显示 this question 中的文本。我只需要知道单词的位置以突出显示它,这是棘手的部分。还有:sun_with_face:。它可以是任何东西,只要它用':'打开和关闭,中间有 no 空格 (</code>) 和换行符 (<code>\n
).
我想您要问的是如何将突出显示应用于以冒号开头、具有某种文本跨度并以冒号结尾的文本。您可以使用文本小部件 search
方法找到与该模式匹配的文本,并且可以使用文本小部件的标记功能应用突出显示。
由于您要根据模式进行搜索,因此需要使用正则表达式搜索。您可以通过在调用 search
方法时将 regexp
设置为 True
来实现。因为模式可以是任意长度,所以你还需要传入一个变量,这样 tkinter 就可以 return 它匹配了多少个字符。您可以使用此信息来应用突出显示。
注意:使用正则表达式搜索时,表达式必须跟在 Tcl regular expression syntax 之后,而不是 python 之后。有一些细微的差别。
下面的示例查找冒号后紧接最短的非空白字符组和冒号的所有匹配项。然后它将标签 "highlight" 添加到每个匹配项:
countVar = tk.IntVar()
start_index = "1.0"
while start_index:
index = text_widget.search(r':\S+?:', start_index, stopindex="end",
count=countVar, regexp=True)
if index:
# ie: a match was found
end_index = "{} + {} chars".format(index, countVar.get())
text_widget.tag_add("highlight", index, end_index)
start_index = end_index
else:
start_index = None