'How to use MDBottomNavigation with MVC and Hotreload pattern?

I can't figure out how to use MVC inside MDBottomNavigation. Tried to reassign manager_screens to ScreenManager from MDBottomNavigation and add screens by adding MDBottomNavigationItem widget. But it doesn't work.

Code snippet from MainApp:

def build_app(self) -> ScreenManager:
    import View.screens

    self.theme_cls.primary_palette = "Teal"
    ms = MainScreenView()
    Window.bind(on_key_down=self.on_keyboard_down)
    importlib.reload(View.screens)
    screens = View.screens.screens

    for i, name_screen in enumerate(screens.keys()):
        ms.ids.bott_nav.add_widget(MDBottomNavigationItem(
            name=name_screen,
            # text=tab_name,
            icon=screens[name_screen]["icon"]))
        model = screens[name_screen]["model"]()
        print(ms.ids.bott_nav.ids)
        controller = screens[name_screen]["controller"](model)
        view = controller.get_view()
        view.manager_screens = ms.ids.bott_nav.ids.tab_manager
        # view.name = name_screen
        ms.ids.bott_nav.ids.tab_manager.add_widget(view)

    # self.manager_screens = ScreenManager()

    # self.manager_screens.current = 'main screen'
    return ms

screens.py:

from Model.login_screen import LoginScreenModel
from Model.edit_transaction import EditTransactionModel
from Model.some_screen import SomeScreenModel

from Controller.login_screen import LoginScreenController
from Controller.edit_transaction import EditTransactionController
from Controller.some_screen import SomeScreenController

screens = {
    "login screen": {
        "model": LoginScreenModel,
        "controller": LoginScreenController,
        "icon": 'login',
    },
    "edit transaction screen": {
        "model": EditTransactionModel,
        "controller": EditTransactionController,
        "icon": 'cash-plus',
    },
    "some screen": {
        "model": SomeScreenModel,
        "controller": SomeScreenController,
        "icon": 'dots-horizontal',
    },
}

main_screen.py:

from kivymd.uix.screen import MDScreen

class MainScreenView(MDScreen):
    pass

main_screen.kv:

#: import get_color_from_hex kivy.utils.get_color_from_hex

<MainScreenView>
    MDBottomNavigation:
        id: bott_nav
        panel_color: app.theme_cls.primary_dark
        text_color_normal: app.theme_cls.primary_light
        text_color_active: get_color_from_hex("#eeeaea")
        use_text: False

Error appears on startup: AttributeError: 'LoginScreenView' object has no attribute 'header' LoginScreenView taken from pattern.

I suspect that the option to add a widget through a class method does not work as well as if you specify it in kv-files.

Is there a correct way to use MDBottomNavigation in MVC? In addition, I would like to use a more complex screen structure. LoginScreen would like to be placed outside MDBottomNavigation.

Of course, I can not use MDBottomNavigation, but do it myself, but there will still be a problem with reassigning the ScreenManager.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source