#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()
Хорошего дня.