首页 > 解决方案 > KivyMD NavigationDrawer 在多个屏幕上滑动

问题描述

使用 KivyMD MDNavigationLayout,我正在尝试为应用程序制作导航抽屉!我是这样做的,但是我的导航抽屉现在可以跨多个屏幕移动!我只希望它出现在我的HomeScreen上,而不是我的MenuScreen 上

非常感谢你所做的一切。

千伏代码:

MDScreen: 
    MDNavigationLayout:
        ScreenManager:
            HomeScreen:
                id: home
                MDBoxLayout:
                    orientation: 'vertical'
                    MDToolbar: 
                        title: 'Navigation Drawer'
                        left_action_items: [['menu', lambda x: nav_drawer.set_state('toggle')]]
                    Widget: 
            MenuScreen:
                id: menu
        MDNavigationDrawer:
            id: nav_drawer            

<HomeScreen>:
    name: 'home_screen'
    MDLabel:
        id: label
        text: 'Home Screen'
        halign: 'center'  
    MDRaisedButton:
        text: 'Menu Screen'
        pos_hint: {'center_x':0.5, 'center_y':0.4}
        on_press: root.manager.current = 'menu_screen'

<MenuScreen>:
    name: 'menu_screen'
    MDLabel:
        text: f'Menu Screen from Home Screen'
        halign: 'center'
    MDRaisedButton:
        text: 'Home Screen'
        pos_hint: {'center_x':0.5, 'center_y':0.4}
        on_press: root.manager.current = 'home_screen'

主屏幕:

主屏幕

菜单屏幕:

菜单屏幕

标签: pythonkivykivymd

解决方案


from kivy.lang import Builder
from kivy.properties import ObjectProperty

from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout

KV = '''
<ContentNavigationDrawer>:

    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"


MDScreen:

    MDToolbar:
        id: toolbar
        pos_hint: {"top": 1}
        elevation: 10
        title: "MDNavigationDrawer"
        left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

    MDNavigationLayout:
        x: toolbar.height

        ScreenManager:
            id: screen_manager

            MDScreen:
                name: "scr 1"

                MDLabel:
                    text: "Screen 1"
                    halign: "center"

            MDScreen:
                name: "scr 2"

                MDLabel:
                    text: "Screen 2"
                    halign: "center"

        MDNavigationDrawer:
            id: nav_drawer

            ContentNavigationDrawer:
                screen_manager: screen_manager
                nav_drawer: nav_drawer
'''


class ContentNavigationDrawer(MDBoxLayout):
    screen_manager = ObjectProperty()
    nav_drawer = ObjectProperty()


class TestNavigationDrawer(MDApp):
    def build(self):
        return Builder.load_string(KV)


TestNavigationDrawer().run()

https://kivymd.readthedocs.io/en/latest/components/navigationdrawer/#switching-screens-in-the-screenmanager-and-using-the-common-mdtoolbar


推荐阅读