【问题标题】:How to switch between screens within the NavigationDrawer using KivyMD如何使用 KivyMD 在 NavigationDrawer 中的屏幕之间切换
【发布时间】:2020-11-11 01:46:31
【问题描述】:

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

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:'Screen'对象没有属性'nav_drawer'”,我不确定我做错了什么。

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    当您在定义id 的同一规则中使用id 引用对象时,您不需要在其前面加上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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-02
      • 2021-11-17
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多