【问题标题】:KivyMD NavigationDrawer slides over multiple screensKivyMD NavigationDrawer 在多个屏幕上滑动
【发布时间】:2021-11-17 12:51:11
【问题描述】:

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

非常感谢你所做的一切。

KV代码:

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'

主屏幕:

菜单屏幕:

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    NavigationDrawer 是一个设计用于跨多个屏幕工作的小部件。它将显示在多个屏幕上。如果我们仔细查看 you.kv 文件,我们可以找出原因。请注意MDNavigationLayout 是如何在您的Screenmanager 上方的。这意味着您的 ScreenManager 下的所有屏幕(基本上管理您的屏幕并允许您在它们之间轻松切换的小部件)都将显示在 NavigationLayout 中。

    实际上没有办法将屏幕排除在显示 NavigationDrawer 之外,因为该小部件旨在在其下方的所有屏幕上显示自己

    在文档示例中可以看到: https://kivymd.readthedocs.io/en/0.104.1/components/navigation-drawer/[kivymd docs]1

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

        猜你喜欢
        • 2020-11-11
        • 1970-01-01
        • 2021-10-03
        • 1970-01-01
        • 2021-02-26
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        相关资源
        最近更新 更多