Kivy. Проблема с предачей и отображением переменных между Screen в ScreenManager

Уже неделю бьюсь над одной проблемой, перепробовал море вариантов и не один не работает. Суть такова: приложение kivy с .kv, построено с использованием ScreenManager. Есть три класса Screen - First, Second и Result. Первый принимает данные через TextInput, вызывает второй, который принимает аналогичным образом еще набор данных, вызывает функцию обработки данных, затем вызывает третий для отображения результата, и вот здесь загвоздка - передать данные и отобразить результат с лету не удается. Единственное решение которое удалось найти - добавление дополнительной кнопки в третий класс, которая вызывает функцию из этого же класса для отображения ранее расчитаного результата. Может кто подскажет как обойтись без этого лишнего шага?

example.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window

def result():
    name = FirstScreen.entries + SecondScreen.entries
    res = 0
    for i in name:
        res += i
    bolwan = '''[size=20sp]Сумма данных: %s [/size]\n\n'''
    mes = bolwan % (res)
    return mes

class FirstScreen(Screen):
    entries = []

    def fetch_screen(self):
        hp = []
        for key in self.ids.keys():
            s = self.ids[key].text
            if s == '':
                print("Не введено значение")
                return
            try:
                d = float(s)
            except:
                print("Введено недопустимое значение")
                return
            else:
                hp.append(d)
        self.entries.extend(hp)
        MyExampleApp.sm.current = 'second'

class SecondScreen(Screen):
    entries = []

    def fetch_screen(self):
        hp = []
        for key in self.ids.keys():
            s = self.ids[key].text
            if s == '':
                print("Не введено значение")
                return
            try:
                d = float(s)
            except:
                print("Введено недопустимое значение")
                return
            else:
                hp.append(d)
        self.entries.extend(hp)
        mes = result()
        ResultScreen().mes_f(mes)
        MyExampleApp.sm.current = 'result'

class ResultScreen(Screen):

    def mes_f(self, mes):
        self.ids.res_lab.text = mes


class MyExampleApp(App):
    sm = ScreenManager()

    def quit(self):
        App.get_running_app().stop()
        Window.close()

    def build(self):
        self.sm.add_widget(FirstScreen(name='first'))
        self.sm.add_widget(SecondScreen(name='second'))
        self.sm.add_widget(ResultScreen(name='result'))
        return self.sm

if __name__ == '__main__':
    MyExampleApp().run()

myexample.kv

<MyContainer@BoxLayout>:
    canvas.before:
        Color:
            rgba: 0, 1, 1, 0.1
        Rectangle:
            size: self.size
            pos:self.pos

<MyLabel@Label>:
    text_size: self.size
    font_size: '18sp'

<FirstScreen>:
    MyContainer:
        orientation: 'vertical'
        BoxLayout:
            BoxLayout:
                padding: 10, 0, 0, 0
                orientation: 'vertical'
                MyLabel:
                    text: 'Данные №1'
                MyLabel:
                    text: 'Данные №2'
            BoxLayout:
                padding: 0, 0, 10, 0
                orientation: 'vertical'
                TextInput:
                    id: dn_1
                TextInput:
                    id: dn_2
        Button:
            text: 'Next'
            on_press: root.fetch_screen()

<SecondScreen>:
    MyContainer:
        orientation: 'vertical'
        BoxLayout:
            BoxLayout:
                padding: 10, 0, 0, 0
                orientation: 'vertical'
                MyLabel:
                    text: 'Данные №3'
                MyLabel:
                    text: 'Данные №4'
            BoxLayout:
                padding: 0, 0, 10, 0
                orientation: 'vertical'
                TextInput:
                    id: dn_3
                TextInput:
                    id: dn_4
        Button:
            text: 'Расчитать'
            on_press: root.fetch_screen()

<ResultScreen>:
    MyContainer:
        orientation: 'vertical'
        Label:
            text: 'Результаты'
            font_size: '25sp'
        Label:
            id: res_lab
            markup: True
            text: ''
        Button:
            text: 'Выход'
            on_press: app.quit(

)


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

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

Проблема решена следующим образом: example.py:

...

def result():
    ...
    mes = bolwan % (res)
    # ссылка на SreenManager
    sm = App.get_running_app().root
    # ссылка на необходимый Screen
    resultscreen = sm.get_screen('result')
    # изменяем нужную метку
    resultscreen.ids.res_lab.text = mes

class FirstScreen(Screen):
    ...

class SecondScreen(Screen):
    entries = []

    def fetch_screen(self):
        ...
        self.entries.extend(hp)
        result()
        MyExampleApp.sm.current = 'result'

class ResultScreen(Screen):
    pass


class MyExampleApp(App):
    sm = ScreenManager()

    def quit(self):
        App.get_running_app().stop()
        Window.close()

    def build(self):
        self.sm.add_widget(FirstScreen(name='first'))
        self.sm.add_widget(SecondScreen(name='second'))
        self.sm.add_widget(ResultScreen(name='result'))
        return self.sm

if __name__ == '__main__':
    MyExampleApp().run()
→ Ссылка