В настоящее время я разрабатываю текстовый редактор (в Python 2.7) для языка моделирования. Все работает как положено, кроме поведения tkinker в тех случаях, когда в текстовый виджет добавляется много тегов. Чтобы выделить комментарии в модели, я использую цикл, который перебирает весь текст, находит каждую строку, содержащую тег «#», собирает начальную точку этого символа и впоследствии отмечает всю строку (начиная с # ) как комментарий:
def color_sl_comments(self):
complete_text_as_lines = self.text.get('1.0', tk.END + '-1c').splitlines()
for line in complete_text_as_lines:
if '#' in line:
s_l = complete_text_as_lines.index(line) + 1
s_c = line.index('#')
e_l = s_l
e_c = len(line)
self.color_comment(s_l, s_c, e_l, e_c)
def color_comment(self, sl, sc, el, ec):
name = "comment%s.%s.%s.%s." % (sl, sc, el, ec)
self.text.tag_add(name, "%s.%s" % (sl, sc), "%s.%s" % (el, ec))
self.text.tag_config(name, background="white", foreground="grey")
Цвет первых комментариев изменяется, как и ожидалось, но последние остаются со схемой окраски по умолчанию. Однако после отладки кода я обнаружил, что соответствующему тегу присвоен текст, т. Е. Все теги есть, но цвет в окне просто не изменяется.
Более интересным моментом является то, что: если я обновлю соответствующий комментарий, например добавлю еще один дополнительный символ, тогда цвет комментария будет показан правильно Удаление этого символа восстанавливает схему окраски, и текст больше не отображается как комментарий.
Это похоже на ошибку в tkinker, где не все теги отображаются, хотя они и есть. Другая часть кода делает то же самое, но для многострочных комментариев. Здесь первый ML-комментарий окрашен правильно, а второй - нет.
Поскольку проект слишком велик, чтобы вставить его сюда, здесь ссылка . Образец модели находится в исходном каталоге.