如何使用KivyMD在NavigationDrawer中的屏幕之间切换 [英] How to switch between screens within the NavigationDrawer using KivyMD

查看:84
本文介绍了如何使用KivyMD在NavigationDrawer中的屏幕之间切换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是使用kivymd的初学者,并尝试使用KivyMD在NavigationDrawer中的屏幕之间切换,我正在阅读一些文档,并最终获得了这段代码,但它对我不起作用:

I'm beginner in using kivymd and trying to switch between screens within the NavigationDrawer using KivyMD, I was reading some of the documents and ended up with this code but it's not working with me:

from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivymd.theming import ThemableBehavior
from kivymd.uix.list import MDList
from kivymd.app import MDApp



Window.size = (300, 500)
navigation_helper = """
Screen:
    MDToolbar:
        id: toolbar
        pos_hint: {"top": 1}
        elevation: 10
        title: "MDNavigationDrawer"
        left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
        
    NavigationLayout:
        x: toolbar.height

        ScreenManager:
            id: screen_manager

            Screen:
                name: "scr 1"

                MDLabel:
                    text: "Go to Hell"
                    halign: "center"

            Screen:
                name: "scr 2"

                MDLabel:
                    text: "Hell"
                    halign: "center"

        MDNavigationDrawer:
            id: nav_drawer

            ContentNavigationDrawer:
                screen_manager: screen_manager
                nav_drawer: nav_drawer
           
                ScrollView:
                    MDList:

                        OneLineListItem:
                            text: "Screen 1"
                            on_press:
                                root.nav_drawer.set_state("close")
                                root.screen_manager.current = "scr 1"
            
                        OneLineListItem:
                            text: "Screen 2"
                            on_press:
                                root.nav_drawer.set_state("close")
                                root.screen_manager.current = "scr 2"


"""



class DemoApp(MDApp):
    class ContentNavigationDrawer(BoxLayout):
        screen_manager = ObjectProperty()
        nav_drawer = ObjectProperty()

    class DrawerList(ThemableBehavior, MDList):
        pass

    def build(self):
        screen = Builder.load_string(navigation_helper)
        return screen

    def on_start(self):
        pass


DemoApp().run()

但这给了我这个错误"AttributeError:屏幕"对象没有属性"nav_drawer"",我不确定自己做错了什么.

But it's giving me this error " AttributeError: 'Screen' object has no attribute 'nav_drawer'", I'm not sure what I've done incorrect.

推荐答案

在定义 id 的同一规则中使用 id 引用对象时,您无需在其前面加上 root :

When you are referencing an object using an id within the same rule where the id is defined, you do not need to prepend it with root:

                    OneLineListItem:
                        text: "Screen 1"
                        on_press:
                            nav_drawer.set_state("close")
                            screen_manager.current = "scr 1"

                    OneLineListItem:
                        text: "Screen 2"
                        on_press:
                            nav_drawer.set_state("close")
                            screen_manager.current = "scr 2"

这篇关于如何使用KivyMD在NavigationDrawer中的屏幕之间切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆