Сверните мой код с помощью ПАНЕЛИ инструментов и ДИСПЕТЧЕРА ЭКРАНОВ

#kivy #kivy-language #kivymd

Вопрос:

Я пытаюсь сократить свой код. Я использую KivyMD. Я создал MDToolbar с меню в MDNavigationLayout. Я также создал другой экран с помощью ScreenManager.

Например : Дом, Профиль, Контакты.

Проблема в том, что я копирую/вставляю весь свой код MDToolbar в каждый экран в своем файле kv.

Но я хотел бы иметь только «Заголовок» для всего моего экрана. И мне не так-то просто прочитать документ… Я не нашел того, что хотел.

Итак, я делюсь с вами кодом :

Код на Python :

 class HomeScreen(Screen):
    pass

class ProfilScreen(Screen):
    pass

class ContactScreen(Screen):
    pass

sm = ScreenManager()
sm.add_widget(HomeScreen(name='home'))
sm.add_widget(ProfilScreen(name='profil'))
sm.add_widget(ContactScreen(name='contact'))



class DemoApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = 'Red'
        screen = Builder.load_string(navigation_helper)
        return screen

    def nav_drawer(self):
        pass

DemoApp().run()
 

Код КВ :

 ScreenManager:
    HomeScreen:
    ProfilScreen:
    ContactScreen:


<HomeScreen>:
    name: 'home'

    BoxLayout:
        orientation: 'vertical'
        padding: 35

        MDLabel:
            text: "My Content"

    Screen:
        MDNavigationLayout:
            ScreenManager:
                Screen:
                    BoxLayout:
                        orientation: 'vertical'

                        MDToolbar:
                            title: 'Demo Application'
                            left_action_items: [["menu", lambda x: nav_drawer.set_state('toggle')]]
                            elevation: 10
                        Widget:
                
        
            MDNavigationDrawer:
                id: nav_drawer
                BoxLayout:
                    orientation: 'vertical'
                    spacing: '8dp'
                    padding: '8dp'

                    Image:
                        source: 'imglogo.png'
                        size_hint: .5, .5
                        pos_hint: {"center_x": 0.5}

                    MDLabel:
                        text: 'Le Réseau Foncier'
                        font_style: 'Subtitle1'
                        size_hint_y: None
                        height: self.texture_size[1]

                    MDLabel:
                        text: 'contact@lereseaufoncier.fr'
                        font_style: 'Caption'
                        size_hint_y: None
                        height: self.texture_size[1]

                    ScrollView:
                        MDList:

                            OneLineIconListItem:
                                text: 'Home'
                                on_press: root.manager.current= 'home'

                                IconLeftWidget:
                                    icon: 'home'
                                    on_press: root.manager.current= 'home'

                            OneLineIconListItem:
                                text: 'Profile'
                                on_press: root.manager.current= 'profil'

                                IconLeftWidget:
                                    icon: 'android'
                                    on_press: root.manager.current= 'profil'
                            
                            OneLineIconListItem:
                                text: 'Contact'
                                on_press: root.manager.current= 'contact'

                                IconLeftWidget:
                                    icon: 'phone'
                                    on_press: root.manager.current= 'contact'
 

Это тот же код для и .

Я надеюсь, что кто — нибудь сможет мне помочь.

Спасибо.

Ответ №1:

Ре, поэтому я нахожу решение :

Вот, весь код :

 from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window


Window.size = (800, 800)

navigation_helper = """



Screen:
    BoxLayout:
        orientation: 'vertical'
        MDToolbar:
            id: title_bar
            title: 'Demo Application'
            left_action_items: [["menu", lambda x: nav_drawer.set_state('toggle')]]
            elevation: 10
            height:'50dp'
        Widget:


    MDNavigationLayout:

        ScreenManager:
            id: scr
        
            MDScreen:
                name: 'home'
                BoxLayout:
                    orientation: 'vertical'

                    MDLabel:
                        text: 'Some home text'
                
                
            MDScreen:
                name: 'profil'
                BoxLayout:
                    orientation: 'vertical'

                    MDLabel:
                        text: 'Some profil text'

            MDScreen:
                name: 'contact'
                BoxLayout:
                    orientation: 'vertical'

                    MDLabel:
                        text: 'Some contact text'

    
        MDNavigationDrawer:
            id: nav_drawer
        
            BoxLayout:
                orientation: 'vertical'
                spacing: '8dp'
                padding: '8dp'

                Image:
                    source: 'imglogo.png'
                    size_hint: .5, .5
                    pos_hint: {"center_x": 0.5}

                MDLabel:
                    text: 'Le Réseau Foncier'
                    font_style: 'Subtitle1'
                    size_hint_y: None
                    height: self.texture_size[1]

                MDLabel:
                    text: 'contact@lereseaufoncier.fr'
                    font_style: 'Caption'
                    size_hint_y: None
                    height: self.texture_size[1]

                ScrollView:
                    MDList:

                        OneLineIconListItem:
                            text: 'Home'
                            on_press: scr.current= 'home'

                            IconLeftWidget:
                                icon: 'home'
                                on_press: scr.current= 'home'

                        OneLineIconListItem:
                            text: 'Profile'
                            on_press: scr.current= 'profil'

                            IconLeftWidget:
                                icon: 'android'
                                on_press: scr.current= 'profil'
                        
                        OneLineIconListItem:
                            text: 'Contact'
                            on_press: scr.current= 'contact'

                            IconLeftWidget:
                                icon: 'phone'
                                on_press: scr.currentt= 'contact'



            
"""


class DemoApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = 'Red'
        screen = Builder.load_string(navigation_helper)
        return screen

    def nav_drawer(self):
        pass

DemoApp().run()
 

Хорошего дня.