如何仅在tkinter中更改所选文本的属性

时间:2018-06-05 12:19:56

标签: python tkinter

此代码会更改您输入的文字的颜色

from tkinter import*

from tkinter.colorchooser import*

def getColor():
    color = askcolor()
    text['fg'] = color[1]

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

king=Menu(root)
root.config(menu=king)

view= Menu(king,tearoff = 0)

view2=Menu(view,tearoff=0)
view2.add_command(label='Color',command=getColor)

view.add_cascade(label='Text',menu=view2)

king.add_cascade(label="View",menu=view)

但我需要更改所选文字。例如,我们输入了文本&#34; Hello my name&#39; Alex&#34 ;,将整个文本的颜色更改为红色,然后选择单词&#34; Alex&#34;并只改变它的颜色。 也许在这里有必要申请,但我不知道如何 text.bind ('<B1-Motion>') text.tag_add(SEL_FIRST,SEL_LATS)

请帮帮我

1 个答案:

答案 0 :(得分:1)

您无需绑定B1-Motion即可使其正常工作,因为您可以轻松获取当前选定的文本。每次选择颜色时,您都可以检查是否有选择。如果没有,您只需更改文本小部件的foreground属性即可。如果有,您需要在当前选择上创建标记并更改标记的foreground。但是,每次执行此操作时都需要创建一个新的标记名称以防止更改上一个选择的颜色,您可以使用一个简单的计数器来添加到标记名称。

在代码中,它看起来像这样:

from tkinter import *
from tkinter.colorchooser import *

def getColor():
    global count
    color = askcolor()
    if text.tag_ranges('sel'):
        text.tag_add('colortag_' + str(count), SEL_FIRST,SEL_LAST)
        text.tag_configure('colortag_' + str(count), foreground=color[1])
        count += 1
    else:
        # Do this if you want to overwrite all selection colors when you change color without selection
        # for tag in text.tag_names():
        #     text.tag_delete(tag)
        text.config(foreground=color[1])

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

count = 0

king=Menu(root)
root.config(menu=king)

view= Menu(king, tearoff=0)
view2=Menu(view, tearoff=0)
view2.add_command(label='Color',command=getColor)

view.add_cascade(label='Text', menu=view2)
king.add_cascade(label='View', menu=view)

root.mainloop()