My program contains two screens. I wish to change the toolbar title whenever I change screens.
This is my main.py file
from kivymd.app import MDApp
from kivy.lang import Builder
from kivymd.uix.boxlayout import MDBoxLayout
from kivy.properties import ObjectProperty, StringProperty
from kivymd.uix.navigationdrawer import MDNavigationDrawer
from kivymd.uix.navigationdrawer import MDNavigationLayout
from kivy.uix.screenmanager import Screen
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager
from kivymd.uix.toolbar import MDToolbar
Window.size = (360,640)
global sm
class DashboardScreen(Screen):
def __init__(self, **kwargs):
super(DashboardScreen, self).__init__(**kwargs)
class DigitalGoldScreen(Screen):
def __init__(self, **kwargs):
super(DigitalGoldScreen, self).__init__(**kwargs)
class ContentNavigationDrawer(MDBoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
# Create the screen manager
sm = ScreenManager()
sm.add_widget(DashboardScreen(name='screen-dash'))
sm.add_widget(DigitalGoldScreen(name='screen-dgld'))
class MoneyManagerCopiedApp(MDApp):
def __init__(self, **kwargs):
super(MoneyManagerCopiedApp, self).__init__(**kwargs)
def set_toolbartitle(self, screen):
self.title = screen
return self.title
def get_toolbartitle(self):
screentitle = self.title
if screentitle == "screen-dash":
self.settitle = "Dashboard"
elif screentitle == "screen-dgld":
self.settitle = "Digital Gold"
else:
pass
return (self.settitle)
def build(self):
pass
print(sm.current)
if __name__ == "__main__":
MoneyManagerCopiedApp().run()
Here is my .kv file
<ContentNavigationDrawer>:
ScrollView:
MDList:
OneLineListItem:
text: "Digital Gold"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen-dgld"
OneLineListItem:
text: "Dashboard"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen-dash"
MDScreen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "dashboard"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDNavigationLayout:
ScreenManager:
id: screen_manager
DashboardScreen:
DigitalGoldScreen:
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
<DashboardScreen>:
name: 'screen-dash'
MDRectangleFlatButton:
text: "You're in dashboard screen"
pos_hint: {'center_x':0.5,'center_y':0.6}
on_press: root.manager.current = 'screen-dgld'
<DigitalGoldScreen>:
name: 'screen-dgld'
MDLabel:
text: "You're in digigold screen"
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'screen-dash'
I found somewhere something related to binding a callback function but I didn't understand that. How do I create such a function and place it inside the toolbar property of MDToolbar in .kv file?
You can just include the change in your on_press
for the Button
that changes the Screen
. Like this:
<DashboardScreen>:
name: 'screen-dash'
MDRectangleFlatButton:
text: "You're in dashboard screen"
pos_hint: {'center_x':0.5,'center_y':0.6}
on_press:
root.manager.current = 'screen-dgld'
app.root.ids.toolbar.title = 'Digital Gold'
<DigitalGoldScreen>:
name: 'screen-dgld'
MDLabel:
text: "You're in digigold screen"
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press:
root.manager.current = 'screen-dash'
app.root.ids.toolbar.title = 'Dashboard'