I'm using KivyMD framework and I'm trying to manage screens from classes but I don't know how to do it. NavigationDrawer should be manageable in every screens.
I want to make, 5 different screens:
- Home Screen for welcome message.
- Football screen
- Basketball screen
- Volleyball screen
- News screen
Here's example of my code:
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.app import MDApp
KV = '''
<ContentNavigationDrawer>:
ScrollView:
MDList:
OneLineListItem:
icon: 'soccer'
text: "Football"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 1"
OneLineListItem:
text: "Basketball"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 2"
OneLineListItem:
text: "Screen 3"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 3"
OneLineListItem:
text: "Screen 4"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "scr 4"
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "Sports App"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDNavigationLayout:
x: toolbar.height
ScreenManager:
id: screen_manager
Screen:
name: "scr 1"
MDLabel:
icon: 'soccer'
text: "Football"
halign: "center"
Screen:
name: "scr 2"
MDLabel:
text: "Basketball"
halign: "center"
Screen:
name: "scr 3"
MDLabel:
text: "Screen 3"
halign: "center"
Screen:
name: "scr 4"
MDLabel:
text: "Screen 4"
halign: "center"
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
'''
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
class Sports(MDApp):
def build(self):
return Builder.load_string(KV)
Sports().run()
With classified version:
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.app import MDApp
KV = '''
<ScrManage>:
HomeScreen:
name: 'home'
FBScreen:
name: 'football'
BBScreen:
name: 'basketball'
VBScreen:
name: 'volleyball'
NScreen:
name: 'news'
ScrollView:
MDList:
OneLineListItem:
text: "Home"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "home"
OneLineListItem:
icon: 'soccer'
text: "Football"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "football"
OneLineListItem:
text: "Basketball"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "basketball"
OneLineListItem:
text: "Volleyball"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "volleyball"
OneLineListItem:
text: "News"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "news"
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
<HomeScreen>:
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "Sports App"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDNavigationLayout:
x: toolbar.height
ScreenManager:
id: screen_manager
<FBScreen>:
Screen:
name: "football"
MDLabel:
text: "Football"
halign: "center"
<BBScreen>:
Screen:
name: "basketball"
MDLabel:
text: "Basketball"
halign: "center"
<VBScreen>:
Screen:
name: "volleyball"
MDLabel:
text: "Volleyball"
halign: "center"
<NScreen>:
Screen:
name: "news"
MDLabel:
text: "News"
halign: "center"
'''
class HomeScreen(Screen):
pass
class FBScreen(Screen):
pass
class BBScreen(Screen):
pass
class VBScreen(Screen):
pass
class NScreen(Screen):
pass
class ScrManage(ScreenManager):
pass
class Sports(MDApp):
def build(self):
return Builder.load_string(KV)
Sports().run()
Returning empty screen. Just white.
Thanks.