Не знаю как вызвать добавление в Лэйла в Виджет Окна Диалога (живой поиск) Kivy, Python
Пытаюсь сделать поиск в KivyMD + Kivy. При вызове диалогового окна, появляются TextFields в которых вводятся данные, данные забираются и через базу данных выводится список на Виджет. Виджет расширяется и заполняется лейблами. Вот проблема: Не могу вызвать дополнение Лэйбла в виджет. Дело в том, что текстовые поля находятся в 1 классе, а вызвать добавление Лэйблов я могу толь в другом. Как это исправить? '''
import sqlite3
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivymd.uix.label import MDLabel
from kivymd.app import MDApp
from kivymd.uix.tab import MDTabsBase
from kivymd.uix.list import OneLineListItem
from kivymd.theming import ThemableBehavior
from kivymd.uix.behaviors import RectangularElevationBehavior
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.dialog import MDDialog
class Tab(FloatLayout, MDTabsBase):
pass
class CustomToolbar(ThemableBehavior, RectangularElevationBehavior, MDBoxLayout):
pass
class OneLineListItems(OneLineListItem):
pass
class ContentDialog(MDBoxLayout):
textCompany = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
def insert_text(self, *args):
self.max_characters = 2
self.con = sqlite3.connect('tikers.db')
self.cursorObj = self.con.cursor()
# self.con.create_function("mylower", 1, self.lower_string)
dat = []
if len(self.textCompany.text) > self.max_characters and self.max_characters > 0:
tC1 = self.textCompany.text
t1 = tC1[0:3]
self.cursorObj.execute(f"SELECT * FROM tiks WHERE company LIKE '%{t1}%'")
rows = self.cursorObj.fetchall()
for row in rows:
dat.append(row)
for id, company in dat:
App.get_running_app().addLabel()
self.cursorObj.close()
self.con.close()
class TestApp(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.Contentin = ContentDialog()
self.load_kv('icons.kv') # Подключаем файл kv
self.con = sqlite3.connect('bas.db')
self.cursorObj = self.con.cursor()
dialog = None
# Функция build
def build(self):
self.theme_cls.primary_palette = "Orange" # "Purple", "Red"
self.theme_cls.primary_hue = "A400"
def showConfirmationDialog(self):
if not self.dialog:
self.dialog = MDDialog(
size_hint=(0.9, 0.9),
title="Введите данные: ",
type="custom",
content_cls=ContentDialog(),
)
self.dialog.open()
# Закрытие диалогового окна
def callback(self, *args):
self.dialog.dismiss()
def addLabel(self):
self.label = MDLabel(text=f"{company}", color=(0, 0, 0, 1))
self.root.ids.listDialog.add_widget(self.label)
self.label.texture_update()
boxlayout = self.root.ids.listDialog()
height = 0
for child in boxlayout.children:
height += child.texture_size[1]
height += 2 * child.padding_y
boxlayout.height = height
if __name__ == "__main__":
TestApp().run()
kv file
<ContentDialog>:
orientation: "vertical"
spacing: "7dp"
size_hint_y: None
height: "340sp"
textCompany: textF_1
BoxLayout:
id: listDialog
orientation: "horizontal"
height: "0"
size_hint: None, None
MDTextFieldRect:
id: textF_1
hint_text: "ммммм"
size_hint: 1, None
height: "30sp"
on_focus: root.insert_text()
BoxLayout:
orientation: "horizontal"
spacing: "1sp"
MDRectangleFlatButton:
id: button_2
size_hint: .5, None
text :"Отмена"
text_color: self.theme_cls.primary_color
on_press : app.callback()
MDRectangleFlatButton:
id: button_3
size_hint: .5, None
text: "Ввод"
text_color: self.theme_cls.primary_color
on_release: app.callback()
on_press: root.insert_text()
BoxLayout:
orientation: "vertical"
MDToolbar:
title: "ZaAkcii"
right_action_items: [["clock", lambda x: app.callback_2()]]
MDTabs:
tab_bar_height: "15dp"
elevation: 7
Tab:
text:"nnnnnnnnn"
BoxLayout:
id: listStocks
orientation: "vertical"
CustomToolbar:
id: toolbar
pos_hint: {"bottom": 1}
size_hint_y: None
height: "40dp"
padding: "5dp"
spacing: "12dp"
elevation: 10
md_bg_color: app.theme_cls.primary_color
MDFloatingActionButton:
id: button_1
icon: "git"
user_font_size: "25sp"
elevation_normal: 7
on_press: app.showConfirmationDialog()
ScrollView:
id: scroll
MDList:
id: container
Tab:
text: "nnnnnn"
Tab:
text: "bbbbbbbb"
'''
Ответы (1 шт):
Сделал через базу данных. но уперся в невозможность добавлять виджеты в виджет, который находится в диалоговом окне. Решил все сделать на отдельной вкладке. Сделал вызов новой базы данных после получения среза из TextField. В другом классе подключаюсь к БД и забираю результаты. Функцию вызываю сразу после закрытия БД.