Вы используете float для индексов текстовых виджетов.Индексы не являются числами с плавающей запятой, это строки вида строка . столбец .Затем вы делаете странный выбор округления индекса вверх или вниз.
Давайте посмотрим на «NOYDIR» в качестве примера, поскольку вы утверждаете, что он не находит.С помощью всего лишь одного оператора печати вы увидите, что он находит NOYDIR, но вычисляемые индексы имеют значение 14,32 в качестве начала и 14,4 в качестве конца.Поскольку конечный индекс находится перед начальным индексом (символ 4 перед символом 32), tkinter не будет выделять это слово.
Почему второй индекс 14.4?Это потому, что e.start()
возвращает 40. Вы конвертируете это в число с плавающей точкой, добавляя "."и значение в строке, получая «1,40».Затем вы конвертируете его в число с плавающей точкой, которое преобразует «1,40» в «1,4».Именно поэтому вы не должны рассматривать индексы текстовых виджетов как плавающие.Индекс представляет собой строку в форме строка . столбец .Когда вы конвертируете его в число с плавающей точкой, значение «14,40» не отличается от «14,4», но для текстового виджета «14,40» и «14,4» это очень разные вещи.