У меня проблема с написанием плагина gedit на python с использованием PyGTK.
Основная работа плагина состоит в том, чтобы отфильтровать хранилище дерева на основе текста, введенного в текстовой записи. Поиск - это «живой» поиск, т. Е. Нет кнопки, которую нужно нажать, поиск выполняется по событию «key_release_event», которое обрабатывается методом .refilter () фильтра дерева:
widget.connect('key_release_event', self.on_type_search_box_mask)
Со своей стороны дерево фильтруется функцией:
treeFilter.set_visible_func(self.search_in_reference, None)
Теперь обратите внимание, что дерево довольно большое, у меня 1-2 тысячи строк, но только 1 уровень и всего несколько строк (10-20) имеют дочерних элементов 1 уровня, поэтому максимальная глубина равна двум.
Ну, все работает нормально, когда я набираю что-то, дерево фильтруется так, как я хочу, даже если я печатаю очень быстро, так что refilter () вызывается дважды в один и тот же момент.
Теперь проблема ... если я удаляю текст в текстовой записи (с помощью клавиши Backspace или Del), я получаю следующую ошибку от Python, повторяемую много раз:
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.RuntimeError'> ignored
Exception RuntimeError: 'maximum recursion depth exceeded while calling a Python object' in <type 'exceptions.RuntimeError'> ignored
Error in sys.excepthook:
RuntimeError: maximum recursion depth exceeded
Original exception was:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Ошибка не появляется внезапно с кнопками backspace или del, но после некоторых нажатий (7-15) также требуется меньшее давление, если я нажимаю эти кнопки быстрее!
После ошибок плагин продолжает работать, но с некоторыми проблемами: строки с потомками дублировались несколько раз, а функция фильтрации не работает ...
Теперь вы можете просто сказать мне, что у меня есть проблема с рекурсией ... но хорошая история в том, что у меня нет ни одной рекурсии в коде !!!
Может быть, какое-то событие вызвано двумя кнопками del и backspace, но я не могу понять, что это!
Я действительно схожу с ума !!! пожалуйста, мне нужна помощь!
Luca