Python 3 Tkinter |更改介于';之间的单词的颜色/样式:';文本内小部件
假设我们有这样一个文本:Python 3 Tkinter |更改介于';之间的单词的颜色/样式:';文本内小部件,python,tkinter,colors,emoji,text-widget,Python,Tkinter,Colors,Emoji,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\u和_face:?这就是我试图通过将文本小部件的粗体和颜色更改为特定部分来突出显示的内容 问题: 如何过滤文本:这些词:?您可能会注意到这些都是emoji.demojized()e
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\u和_face:
?这就是我试图通过将文本小部件的粗体和颜色更改为特定部分来突出显示的内容
问题:
- 如何过滤
?您可能会注意到这些都是文本:这些词:
emoji,因此可选的解决方案是突出显示emoji.demojized()
列表中的所有单词,但我觉得这将耗费大量资源和时间(因为该列表包含1000多个项目)emoji.UNICODE\u emoji
- 如何突出想要的东西。即使我们可以以某种方式解决第一个问题,这些贬义的表情符号在文本的中间…
我只想澄清一下:我知道如何突出显示来自的文本。我只需要知道单词的位置就可以把它点亮,这是很棘手的部分。还有:sun_和_面:。它可以是任何东西,只要用“:”打开和关闭,中间没有空格(
)和换行符(\n
)。我想你要问的是如何对以冒号开头、具有某种文本跨度、以冒号结尾的文本应用突出显示。您可以使用文本小部件search
方法查找与该模式匹配的文本,并且可以使用文本小部件的标记功能应用高亮显示
因为您希望根据模式进行搜索,所以需要使用正则表达式搜索。在调用search
方法时,可以通过将regexp
设置为True
来实现这一点。因为模式可以是任意长度,所以还需要传入一个变量,以便tkinter可以返回匹配的字符数。可以使用此信息应用高亮显示
注意:当使用正则表达式搜索时,表达式必须跟随,而不是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
只是想澄清一下:你问的是如何搜索
:脸为“
”的sun\u,并在其上应用标记?你说字符之间只能是a-z,但你给出的示例中包含下划线。@BryanOakley哦,对了……我刚刚意识到它也可以有-
,&
…等等。忘了那句话吧。我的错误。它运行得很好,尽管我注意到当这两个文本相邻时::欧盟::波兰:
,出于某种原因,它只突出显示第一个……我认为不需要+'+1c'
(在索引末尾加上一个字符)。@ProgramerBeginner:你是对的。我已经改变了这一点,也稍微调整了模式。