如何在文本Tk()中突出显示某些单词

时间:2019-06-04 03:47:07

标签: python tkinter text tk

我正在尝试在Text Tk()中给出公认的句子。我想根据标签上的某些标记用不同的颜色突出显示。我正在将模型结果部署到GUI。模型输出的文本文件格式如下:

# 1.0000
This B-LOC
is I-LOC
example I-LOC
of E-LOC
my O
data O
format O
. O
In O
this B-ORG
place E-ORG
, O
characters O
of O
my O
language O
is B-PNAME
applied E-PNAME
. O

And S-PNAME
help O
Me. O

这是代码示例。

if l_list[i] == "S-PNAME" or "B-PNAME" or "I-PNAME" or "E-PNAME":

    self.output.update()
    self.output.insert(END,s_list[i])
    self.output.config(foreground='red')                                   

elif l_list[i] == "S-ORG" or "B-ORG" or "I-ORG" or "E-ORG":              

    self.output.update()
    self.output.insert(END,s_list[i])
    self.output.config(foreground='pink') 

else:
    self.output.update()
    self.output.insert(END,s_list[i])

我想用红色的P-NAME标签,粉红色的LOC标签给令牌着色....但是在我的输出中,所有句子都被着色为红色。

1 个答案:

答案 0 :(得分:1)

我假设您的self.output是文本小部件。当前,您只是通过调用self.output.config(foreground=...)来修改小部件中所有文本的前景。

要突出显示不同文本的颜色,您需要为插入的文本设置tag,然后使用tag_config来配置每个标签的颜色。

import tkinter as tk

root = tk.Tk()

text = tk.Text(root)
text.pack()

text.insert(tk.INSERT,"This is a red message\n","red")
text.insert(tk.INSERT,"This is a green message\n","green")
text.insert(tk.INSERT,"This is a blue message\n","blue")

text.tag_config("red", foreground="red")
text.tag_config("green", foreground="green", relief="sunken",borderwidth=2)
text.tag_config("blue", foreground="blue", underline=1)

root.mainloop()