Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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 3 Tkinter |更改介于';之间的单词的颜色/样式:';文本内小部件_Python_Tkinter_Colors_Emoji_Text Widget - Fatal编程技术网

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.demojized()
    emoji,因此可选的解决方案是突出显示
    emoji.UNICODE\u emoji
    列表中的所有单词,但我觉得这将耗费大量资源和时间(因为该列表包含1000多个项目)

  • 如何突出想要的东西。即使我们可以以某种方式解决第一个问题,这些贬义的表情符号在文本的中间…

编辑


我只想澄清一下:我知道如何突出显示来自的文本。我只需要知道单词的位置就可以把它点亮,这是很棘手的部分。还有: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:你是对的。我已经改变了这一点,也稍微调整了模式。