没有导航抽屉的屏幕

时间:2019-10-06 07:47:17

标签: python android kivy kivy-language

我正在尝试使用厨房水槽演示学习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,这会引起一些问题。任何想法表示赞赏。

0 个答案:

没有答案