kivy MDToolbar and OneLineListItem
у меня есть код в котором постоянно повторяется:OneLineListItem и MDToolbar. Как мне избавится от большой писанины? (один раз написать и везде применять) Заранее спасибо за любую помощь.
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.properties import ObjectProperty
KV = '''
<ContentNavigationDrawer>:
orientation: "vertical"
Screen:
BoxLayout:
orientation: "vertical"
ScrollView:
MDList:
OneLineListItem:
id: on1
text: "Задачи"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen 1"
OneLineListItem:
id: on2
text: "Цели"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen 2"
Screen:
NavigationLayout:
ScreenManager:
id: screen_manager
Screen:
name: "screen 1"
BoxLayout:
orientation: 'vertical'
MDToolbar:
id: toolbar
title: "Задачи"
left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
Screen:
name: "screen 2"
BoxLayout:
orientation:'vertical'
MDToolbar:
id: toolbar
title: "Задачи"
left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
'''
class TestNavigationDrawer(MDApp):
def build(self):
self.root = Builder.load_string(KV)
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
TestNavigationDrawer().run()
Ответы (1 шт):
Автор решения: Xyanight
→ Ссылка
Вот так:
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.scrollview import ScrollView
from kivymd.app import MDApp
from kivymd.uix.list import OneLineListItem
KV = '''
<Item>
on_press:
if root.instance_root: root.instance_root.nav_drawer.set_state("close")
if root.instance_root: root.instance_root.screen_manager.current = "screen 2"
<ContentNavigationDrawer>:
MDList:
id: box
BoxLayout:
orientation: "vertical"
MDToolbar:
id: toolbar
title: "Задачи"
pos_hint: {"top": 1}
left_action_items: [['menu', lambda x: nav_drawer.toggle_nav_drawer()]]
NavigationLayout:
ScreenManager:
id: screen_manager
Screen:
name: "screen 1"
MDLabel:
text: 'Screen 1'
Screen:
name: "screen 2"
MDLabel:
text: 'Screen 2'
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
id: content
screen_manager: screen_manager
nav_drawer: nav_drawer
'''
class TestNavigationDrawer(MDApp):
def build(self):
self.root = Builder.load_string(KV)
def on_start(self):
instance_content = self.root.ids.content
for text in ("Задачи", "Цели"):
self.root.ids.content.ids.box.add_widget(
Item(text=text, instance_root=instance_content)
)
class Item(OneLineListItem):
instance_root = ObjectProperty()
class ContentNavigationDrawer(ScrollView):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
TestNavigationDrawer().run()