-
-
Notifications
You must be signed in to change notification settings - Fork 673
Components Navigation Drawer with custom NavigationDrawerIconButton
Artem Bulgakov edited this page Dec 7, 2019
·
3 revisions
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.uix.image import Image
from kivymd.app import MDApp
from kivymd.toast import toast
from kivymd.uix.list import ILeftBody, OneLineAvatarListItem
root_kv = """
#:import NavigationLayout kivymd.uix.navigationdrawer.NavigationLayout
<ContentNavigationDrawer@MDNavigationDrawer>
drawer_logo: "demos/kitchen_sink/assets/drawer_logo.png"
NavigationDrawerSubheader:
text: "Menu:"
<CustomNavigationDrawerIconButton>
AvatarSampleWidget:
source: root.source
NavigationLayout:
id: nav_layout
ContentNavigationDrawer:
id: nav_drawer
BoxLayout:
orientation: "vertical"
MDToolbar:
id: toolbar
title: app.title
md_bg_color: app.theme_cls.primary_color
background_palette: "Primary"
background_hue: "500"
elevation: 10
left_action_items:
[["menu", lambda x: app.root.toggle_nav_drawer()]]
BoxLayout:
id: content
orientation: "vertical"
"""
class AvatarSampleWidget(ILeftBody, Image):
pass
class CustomNavigationDrawerIconButton(OneLineAvatarListItem):
source = StringProperty()
def _set_active(self, active, nav_drawer):
pass
class MainApp(MDApp):
def __init__(self, **kwargs):
self.title = "KivyMD Examples - Navigation Drawer with Custom Buttons"
self.theme_cls.primary_palette = "Teal"
super().__init__(**kwargs)
def build(self):
self.root = Builder.load_string(root_kv)
def on_start(self):
for i in range(15):
self.root.ids.nav_drawer.add_widget(
CustomNavigationDrawerIconButton(
text=f"Item {i}",
source="data/logo/kivy-icon-128.png",
on_press=lambda x, y=i: self.callback(x, y),
)
)
def callback(self, instance, value):
toast("Pressed item menu %d" % value)
if __name__ == "__main__":
MainApp().run()