LINUX.ORG.RU

Поиск в виджете Tkinter

 


0

1

Нагуглил такой код (внутри процедуры):

# Найти индексы искомого текста в окне Tkinter
def highlight_text(text_widget, keyword, tag):
        pos = '1.0'
        while True:
                idx = text_widget.search(keyword, pos, END)
                if not idx:
                        break
                pos = '{}+{}c'.format(idx, len(keyword))
                text_widget.tag_add(tag, idx, pos)
Объясните, пожалуйста, в чем смысл while True, и может ли происходить бесконечное зацикливание на этом уровне.

Deleted

Обычный цикл. Бесконечного цикла не долно быть, по идее. После нахождения последнего вхождения искомого (когда idx будет логически ложным) функция завершится.

rikardoac
()
Последнее исправление: rikardoac (всего исправлений: 1)
Ответ на: комментарий от rikardoac

У меня в некоторых случаях (обрабатываю текст, в котором нет искомого фрагмента) происходит бесконечный цикл, когда idx: 1.0, pos: 1.0+0c. Можно ли этого избежать? Как переформулировать цикл while?

Deleted
()
Ответ на: комментарий от Deleted

Тебе не сам цикл необходимо переформулировать, а условия выхода из него.

def highlight_text(text_widget, keyword, tag):
        pos = '1.0'
        while True:
                idx = text_widget.search(keyword, pos, END)
                # вот на этом месте остановись в дебагере и проверь
                # значение idx, в случае, когда ты уверен, что ничего
                # не может быть найдено
                if (not idx) or (<результат для idx при ложном результате поиска>):
                        break
                pos = '{}+{}c'.format(idx, len(keyword))
                text_widget.tag_add(tag, idx, pos)

rikardoac
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.