Я пытаюсь выучить kivymd с помощью демонстрации кухонной раковины.
У меня один и тот же корневой виджет, в котором все экраны наследуют NavigationDrawer и панель инструментов. (это лучший способ?)
Теперь я решил создать экран входа в систему без этих двух виджетов, как я могу сделать это без изменения всей структуры. Сначала появится экран входа в систему, и при нажатии кнопки «войти» корневой виджет будет отображаться как обычно.
Вот код:
main.py
# import [...]
class Screens(object):
#Screens that inherit the drawer and toolbar
data = {
"Route": {
"kv_file": "screens/route.kv",
"Factory": "Factory.Route()",
"name_screen": "routes",
"object": None },
"Account": {
"kv_file": "screens/account.kv",
"Factory": "Factory.Account()",
"name_screen": "account",
"object": None },
"Settings": {
"kv_file": "screens/settings.kv",
"Factory": "Factory.Settings()",
"name_screen": "settings",
"object": None },
}
def show_screen(self, name_screen):
if not self.data[name_screen]["object"]:
Builder.load_file(self.data[name_screen]["kv_file"])
self.data[name_screen]["object"] = eval(
self.data[name_screen]["Factory"])
self.root.ids.manager.add_widget(
self.data[name_screen]["object"])
self.root.ids.manager.current = self.data[name_screen]["name_screen"]
class Main(App, Screens):
theme_cls = ThemeManager()
title = "Main"
def build(self):
root = Builder.load_file("rootw.kv")
return root
def set_title_toolbar(self, title):
self.root.ids.toolbar.title = title
if __name__ == "__main__":
Main().run()
rootw.kv
NavigationLayout:
id: root_nav
MyCustomNavigationDrawer:
id: drawer
# content
# route
# account
# settings
# ...
FloatLayout:
id: float_layout
BoxLayout:
id: box_layout
orientation: 'vertical'
MDToolbar:
id: toolbar
title: app.title
md_bg_color: app.theme_cls.primary_color
background_palette: 'Primary'
background_hue: '500'
elevation: 10
left_action_items:
[['menu', lambda x: app.root.toggle_nav_drawer()]]
ScreenManager:
id: manager
transition: NoTransition()
Screen:
name: "welcome"
FloatLayout:
BoxLayout:
Label:
text: 'some screen i dont want'
Я пробовал несколько вещей, одна из которых - создание ScreenManager с двумя экранами, экраном входа в систему и экраном корневых виджетов, но это мешаетс корневым виджетом, поскольку его корень теперь Screen вместо Navigation_Layout, что вызывает некоторые проблемы. Любые мысли приветствуются.