将彩色文本添加到所选文本 - Tkinter

时间:2015-07-31 12:29:28

标签: python tkinter

我目前正在尝试编写一个程序,在Tkinter中为选定文本的两边添加彩色文本。

到目前为止我设法做的是在所选文本的两边添加文本,这是我使用的功能:

def addTerm(self):
    self.txt.insert(tk.SEL_FIRST,'\\term{')
    self.txt.insert(tk.SEL_LAST,'}' )

所以,如果我有一个WORD并且我选择了它,那么在调用这个函数后它就变成了 \项{word}的。我想知道是否有办法改变我添加的文本的颜色,所以当我使用所选文本的功能时,它会添加' \ term {'和'}'例如,红色,但它不会改变它们之间文本的颜色。

3 个答案:

答案 0 :(得分:2)

为周围文字添加标签:

tk.SEL_FIRST + '-6c', tk.SEL_FIRST  # for \term{
tk.SEL_LAST, tk.SEL_LAST + '+1c'    # for }

使用Text.tag_config(tag_name, background=...)

设置颜色

在以下示例中,我使用term作为标记名称:

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk


class MyFrame(tk.Frame):

    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.txt = tk.Text(self)
        self.txt.pack()
        self.txt.insert(0.0, 'hello\nworld')
        self.btn = tk.Button(self, text='add_term', command=self.add_term)
        self.btn.pack()
        self.txt.tag_config('term', background='red')

    def add_term(self):
        self.txt.insert(tk.SEL_FIRST,'\\term{')
        self.txt.insert(tk.SEL_LAST,'}' )
        self.txt.tag_add('term', tk.SEL_FIRST + '-6c', tk.SEL_FIRST)
        self.txt.tag_add('term', tk.SEL_LAST, tk.SEL_LAST + '+1c')

root = tk.Tk()
f = MyFrame(root)
f.pack()
root.mainloop()

<强>更新

您可以在调用insert

时指定标记名称,而不是之后添加标记
def add_term(self):
    self.txt.insert(tk.SEL_FIRST, '\\term{', 'term')
    self.txt.insert(tk.SEL_LAST, '}', 'term')

答案 1 :(得分:1)

插入文本时,可以为其指定插入文本时应用于文本的标记的名称:

def addTerm(self):
    self.txt.insert(tk.SEL_FIRST,'\\term{',("markup",))
    self.txt.insert(tk.SEL_LAST,'}', ("markup",))

然后,您需要将标记配置为具有所需的属性。您可以在第一次创建文本小部件时执行此操作:

self.txt.tag_configure("markup", foreground="gray")

答案 2 :(得分:0)

有点回答:How to change the color of certain words in the tkinter text widget?

您需要在tag函数中添加init

self.txt.tag_configure("COLOR", foreground="red")

你可以这样着色:

self.text.tag_add("COLOR", 1.0 , "sel.first")  
self.text.tag_add("COLOR", "sel.last", "end")  

例如,使用链接帖子中提供的代码: enter image description here