0

试图使工具栏作为抽屉的打开和关闭按钮工作,但由于某种原因,抽屉打开后,菜单按钮不再处于活动状态,并且抽屉位于其顶部(不可见)。您可以从工具栏菜单区域拖动抽屉,即使它们在 BoxLayout 中是分开的。

from kivy.app import App
from kivymd.theming import ThemeManager
from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivymd.uix.button import MDIconButton
from kivy.lang import Builder

KV = """
#:import Clock kivy.clock.Clock

Screen:
    BoxLayout:
        orientation: 'vertical'
        
        MDToolbar:
            size_hint_y: 0.1
            elevation: -10
            left_action_items: [["menu", lambda x: nav_drawer.set_state('toggle')]]
                
        NavigationLayout:        
            ScreenManager:
                id: screen_manager
                Screen:
                    name: 'menu'
                    BoxLayout:
                        orientation: 'vertical'
                        
                        Widget:
                
                Screen2:
                    name: 's2'
                    BoxLayout:
                        orientation: 'vertical'

                        Widget:
                        MDLabel:
                            text: 'Profile'
                            halign: 'center'

            MDNavigationDrawer:
                id: nav_drawer
                scrim_color: [0, 0, 0, 0.0]
                elevation: 0

                ContentNavigationDrawer:
                    id: drawerContent
                    BoxLayout:
                        orientation: 'vertical'
                        MDLabel:
                            text: 'App'
                            font_style: 'H1'                  
                        MDRectangleFlatButton:
                            text: 'Select 1'
                            pos_hint: {'center_x':0.5,'center_y':0.1}
                            on_release: Clock.schedule_once(lambda x: app.set_screen(screen_manager, nav_drawer, "s2"), .3)
                

                        MDRectangleFlatButton:
                            text: 'Main'
                            pos_hint: {'center_x':0.5,'center_y':0.1}
                            on_release: Clock.schedule_once(lambda x: app.set_screen(screen_manager, nav_drawer, "menu"), .3) 

"""

class ContentNavigationDrawer(BoxLayout):
    pass

class Screen2(Screen):
    pass

#sm = ScreenManager()
#sm.add_widget(Screen2(name='s2'))

class MainApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Orange"
        sm = ScreenManager()
        sm.add_widget(Screen2(name='s2'))
        Builder.load_string(KV)
    
    def set_screen(self, manager, nav_drawer, name_screen):
        manager.current = name_screen
        nav_drawer.set_state("toggle")

     

MainApp().run()

如何调整抽屉覆盖区域的大小?

谢谢!

4

1 回答 1

0
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder

from kivymd.app import MDApp

KV = """
#:import Clock kivy.clock.Clock

Screen:

    MDToolbar:
        id: toolbar
        pos_hint: {"top": 1}
        elevation: 0
        left_action_items: [["menu", lambda x: nav_drawer.set_state('toggle')]]

    NavigationLayout:  
        x: toolbar.height 
   
        ScreenManager:
            id: screen_manager

            Screen:
                name: 'menu'

                BoxLayout:
                    orientation: 'vertical'

                    Widget:

            Screen2:
                name: 's2'
                
                BoxLayout:
                    orientation: 'vertical'

                    Widget:
                    
                    MDLabel:
                        text: 'Profile'
                        halign: 'center'

        MDNavigationDrawer:
            id: nav_drawer
            scrim_color: [0, 0, 0, 0.0]
            elevation: 0

            ContentNavigationDrawer:
                id: drawerContent
                
                BoxLayout:
                    orientation: 'vertical'
                    
                    MDLabel:
                        text: 'App'
                        font_style: 'H1'    
                                      
                    MDRectangleFlatButton:
                        text: 'Select 1'
                        pos_hint: {'center_x':0.5,'center_y':0.1}
                        on_release: Clock.schedule_once(lambda x: app.set_screen(screen_manager, nav_drawer, "s2"), .3)

                    MDRectangleFlatButton:
                        text: 'Main'
                        pos_hint: {'center_x':0.5,'center_y':0.1}
                        on_release: Clock.schedule_once(lambda x: app.set_screen(screen_manager, nav_drawer, "menu"), .3) 

"""


class ContentNavigationDrawer(BoxLayout):
    pass


class Screen2(Screen):
    pass


class MainApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = "Orange"
        sm = ScreenManager()
        sm.add_widget(Screen2(name='s2'))
        return Builder.load_string(KV)

    def set_screen(self, manager, nav_drawer, name_screen):
        manager.current = name_screen
        nav_drawer.set_state("toggle")


MainApp().run()
于 2020-08-12T16:18:04.793 回答