'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 |
---|