Передача данных в ExpansionPanel Kivy между классами

Наверно я плохо ищу, но никак не могу сделать передачу данных между классами. Если в случае с MDScreens все более-менее понятно, то как это сделать с MDExpansionPanel нигде не могу найти информации. То,что есть, как правило устаревшая и на новой версии не работает. Буду благодарен, если кто сумеет помочь.

main.py

class MainScr(MDScreen):
    pass
class Content(MDExpansionPanel): # Класс с содержимым панели
    pass
class TrailingPressedIconButton(ButtonBehavior, RotateBehavior, MDListItemTrailingIcon):
    pass

...

# Функция, выводящая и заполняющая данными ExpansionPanel
def openShedule(self, answer, data):
    self.sm.current = 'ShedScr'
    self.ids = self.root.get_screen('ShedScr').ids
    self.ids.btn_data.text = data
    self.ids.box.clear_widgets()
    ### Читаем файл xml с расписанием ###
    try:
        tree = etree.parse(f'{answer[0]}.xml')
        root = tree.getroot()
        for i, item in enumerate(root.iter("Data")):
            if item.text == data:
                if answer[1] == root.xpath("//Shedule/NameFirst/text()")[i]:
                    async def set_panel_list():
                       await asynckivy.sleep(0)
                       self.ids.box.add_widget(Content())
                    asynckivy.start(set_panel_list())
                    # Content().ids.time_shedule.text = root.xpath("//Shedule/Start/text()")[i]
    except:
       # ... #

В myapp.kv такой код:

<ShedScr>:
    name: 'ShedScr'
    id: shedule
    FitImage:
        #radius: "15dp", "15dp", 0, 0
        source: "paper1.jpg"
    MDScreen:
        ScrollView:
            MDBoxLayout:
                adaptive_height: True
                spacing: 20
                orientation: 'vertical'
                MDButton:
                    pos_hint: {'center_x': .5, 'center_y': .965}
                    on_release: app.show_date_picker()
                    MDButtonText:
                        id: btn_data
                        text: "Дата"
                MDLabel:
                    id: shedule_text
                    theme_text_color: "Custom"
                    text: ''
                    pos_hint: {"center_x": 0.5, "center_y": 0.80}
                    halign: "center"
                MDList:
                    id: box
<Content>
    MDExpansionPanelHeader:
        MDListItem:
            theme_bg_color: "Custom"
            md_bg_color: self.theme_cls.surfaceContainerLowColor
            ripple_effect: False
            MDListItemSupportingText:
                id: time_shedule
                name: 'time_shedule'
                text: "Запись с --- по ---"
            TrailingPressedIconButton:
                id: chevron
                icon: "chevron-down"
                on_release: app.tap_expansion_chevron(root, chevron)
    MDExpansionPanelContent:
        orientation: "vertical"
        padding: 0, 0, 0, 0
        md_bg_color: self.theme_cls.surfaceContainerLowestColor
        MDLabel:
            text: ""
            adaptive_height: True
        MDListItem:
            theme_bg_color: "Custom"
            md_bg_color: 'white'
            MDListItemLeadingIcon:
                icon: "account"
            MDListItemHeadlineText:
                text: "ФИО"
            MDListItemSupportingText:
                text: "Комментарий"
        MDListItem:
            theme_bg_color: "Custom"
            md_bg_color: 'white'
            MDListItemLeadingIcon:
                icon: "phone"
            MDListItemHeadlineText:
                text: "Телефон"
            MDListItemSupportingText:
                text: "+7(123)456-78-90"

Все работает и на экран выводится в нужном количестве, но никак не соображу как передать данные из xml в поля панели. введите сюда описание изображения

Пробовал определить Content как MDScreen, но тогда ExpansionPanel не работает. Если я выполню print(Content().ids), то идентификатор виден. А в обратную сторону ну никак... Kivy 2.3.0 KivyMD 2.0.1


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

Автор решения: Валерий

Я - самоучка, "в университетах не кончали", поэтому не пинайте сильно! :)) Решил проблему "от обратного" - не передавать данные, а наоборот брать их из кода. Возможно кому-то поможет. Вопрос удалять не буду. Изменение кода main.py

if answer[1] == root.xpath("//Shedule/NameFirst/text()")[i]:
    # Создал переменную 
    self.timeRecord = f'Запись с {root.xpath("//Shedule/Start/text()")[i]} по {root.xpath("//Shedule/End/text()")[i]}'
    # Убрал async. т.к. при выводе он вначале формирует пакет, а потом выводит на экран. Из-за этого все надписи получались одинаковыми
    self.ids.box.add_widget(Content())

Немного переделал myapp.kv

<Content>
    MDExpansionPanelHeader:
        MDListItem:
            theme_bg_color: "Custom"
            md_bg_color: self.theme_cls.surfaceContainerLowColor
            ripple_effect: False
            MDListItemSupportingText:
                id: time_shedule
                # В текст вывожу значение переменной.
                text: app.timeRecord

Казалось бы 2 дня изучения интернета и простое решение. :))) введите сюда описание изображения

→ Ссылка