Экран без NavigationDrawer - PullRequest
       1

Экран без NavigationDrawer

0 голосов
/ 06 октября 2019

Я пытаюсь выучить 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, что вызывает некоторые проблемы. Любые мысли приветствуются.

...