Вам не нужно связывать 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()