Живой поиск kivy. Приложение сильно тупит, зависает во время живого поиска по базе данных

Сделал живой поиск по базе данных в двух вариантах.

  1. Одноразовый. После выбора и добавления в строку, если искать второй раз не перегружая программу, происходит вылет. Меню создает родительский виджет в SL2, который не выгружается после удаления меню, и к нему нельзя добавить меню второй раз.
  2. Способ, который в отрывке кода ниже, реализован без выборки среза, и начинает искать с первой буквы. Он стал грузить приложение сразу с запуска(белый экран до минуты). после выбора долго нельзя нажать на кнопку ввода - зависает. Функция, вызов которой тормозит программу, ниже. Что изменить чтобы приложение перестало зависать или вылетать(widgetExcepshion уже есть родитель - причина вылета).
def insertText(self, *args):  # Забираем ввод первых трех символов ввода (#2 вариант)
    self.menu.clear_widgets()  # Очищаем меню чтобы не было повторов
    self.con = sqlite3.connect('tikers.db')
    self.cursorObj = self.con.cursor()
    dat = []
    tC1 = self.textCompany.text
    self.cursorObj.execute(f"SELECT * FROM tiks WHERE company LIKE '%{tC1}%'")
    rows = self.cursorObj.fetchall()
    for row in rows:
        dat.append(row)
        self.menu_items = []
    for id, name in dat:  # Создаем меню
        self.menu_items.append({
            "text": f"{name}", 'height': "20dp",
            "top_pad": "2dp", "bot_pad": "2dp"})
        self.menu = MDDropdownMenu(
            caller=self.textCompany,
            items=self.menu_items,
            position="center",
            width_mult=0)
    self.con.commit()
    self.con.close()
    self.menu.bind(on_release=self.setItem)

def setItem(self, instance_menu, instance_menu_item):
    def setItem(interval):
        self.textCompany.text = instance_menu_item.text
        instance_menu.dismiss()
        self.menu.clear_widgets()  # Очищаем список меню чтобы не было повторов
    Clock.schedule_once(setItem, 0.2)  # Вставляет текст в строку

часть kv

MDTextField:
    id: textF_1
    size_hint: 0.5, None
    hint_text: "*Компания"
    height: "30sp"
    multiline: False
    pos_hint: {'center_x': .3, 'center_y': 0.8}
    on_text: root.ids.listDialog.insertText() #on_focus
    on_text: root.ids.listDialog.menu.open()  #on_focus

Ответы (1 шт):

Автор решения: ProBuro

Нашел решение. Нужно вставить конструкцию, которая предотвращает запуск on_text пока в него не начнут вводить текст. Тогда он не срабатывает с запуском приложения и не грузит его.

on_text: if self.text: root.ids.listDialog.insertText() 
on_text: if self.text: root.ids.listDialog.menu.open() 
→ Ссылка