Danoob
Danoob

Reputation: 21

Using Bottom Navigation bar and Screen Manager together in kivy

I would use a bottom navigation bar for my app in kivy. Unfortunately I'm not able. Can you help me out?

The app shows me only the screen named "PresenzeScreen", but I would also see the Bottom Navigation Bar. Thanks!

# Here I declare the classes of the screens

    class Manager(ScreenManager):
            presenze = ObjectProperty(None)
    
    
    class PresenzeScreen(Screen):
            def switch(self):
                    self.parent.current = 'presenze'
    sm = Manager()
    sm.add_widget(PresenzeScreen( name ='presenze'))


# Here I write the bottom navigation bar

KV = """
Screen:
        MDBottomNavigation:
                panel_color: .2, .2, .2, 1
                MDBottomNavigationItem:
                        name: 'screen 1'
                        text: 'Presenze'
                        on_enter: root.switch()

                       
                                        

                MDBottomNavigationItem:
                        name: 'screen 2'
                        text: 'Test'
                                        

                        MDLabel:
                                text: 'Qua ci sono i test'
                                halign: 'center'

                MDBottomNavigationItem:
                        name: 'screen 3'
                        text: 'Orari'
                                        
                                        
                        MDLabel:
                                text: 'Qua ci sono gli orari degli allenamenti'
                                halign: 'center'

# And here the screen manager

<PresenzeScreen>:
        MDLabel:
                text: 'Ci sei riuscito finalmente'
                haling: 'center'
<Manager>:
        id: screen_manager
        
                
        presenze: presenze 
                
        PresenzeScreen:
                id: presenze
                name: 'presenze'
                manager: screen_manager
       
"""

class MainApp(MDApp):
        
        dialog = None
        def build(self):
               Builder.load_string(KV)
               return Manager()
        
       
MainApp().run()

Upvotes: 1

Views: 1487

Answers (2)

Eduard
Eduard

Reputation: 1

You can use this template to create many 'Bottom Navigation Bars' and 'Screen Manager' to switch between them:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty, ObjectProperty

KV = """
<Screen_1>:
    MDBottomNavigation:
        panel_color: .2, .2, .2, 1
        MDBottomNavigationItem:
            name: 'screen 1'
            text: 'Scr1 Tab1'
            # on_enter: root.switch()     
            MDLabel:
                text: 'Screen_1 Tab_1'
                halign: 'center'                   
        MDBottomNavigationItem:
            name: 'screen 2'
            text: 'Scr1 Tab2'
            on_enter: root.switch()     
            MDLabel:
                text: 'Screen_1 Tab_2 -> Go to Screen_2'
                halign: 'center'
        MDBottomNavigationItem:
            name: 'screen 3'
            text: 'Scr1 Tab3'
            MDLabel:
                text: 'Screen_1 Tab_3'
                halign: 'center'
                
<Screen_2>:
    MDBottomNavigation:
        panel_color: .8, .8, .8, 1
        MDBottomNavigationItem:
            name: 'screen 1'
            text: 'Scr2 Tab1'
            # on_enter: root.switch()     
            MDLabel:
                text: 'Screen_2 Tab_1'
                halign: 'center'                   
        MDBottomNavigationItem:
            name: 'screen 2'
            text: 'Scr2 Tab2'
            on_enter: root.switch()     

            MDLabel:
                text: 'Screen_2 Tab_2 -> Go to Screen_1'
                halign: 'center'
# <Manager>:
#     id: screen_manager
#     screen_1: screen_1 
#     screen_2: screen_2
#     
#     Screen_1:
#         id: screen_1
#         name: 'screen_1'
#         manager: screen_manager
#     Screen_2:
#         id: screen_2
#         name: 'screen_2'
#         manager: screen_manager

        
"""

class Screen_1(Screen):
    def switch(self):
        self.parent.current = 'screen_2'

class Screen_2(Screen):
    def switch(self):
        self.parent.current = 'screen_1'

class Manager(ScreenManager):
    # screen_1 = ObjectProperty(None)
    # screen_2 = ObjectProperty(None)
    pass

class MainApp(MDApp):
    # dialog = None

    def build(self):
        Builder.load_string(KV)
        sm = Manager()
        sm.add_widget(Screen_1(name='screen_1'))
        sm.add_widget(Screen_2(name='screen_2'))
        sm.current = 'screen_2'
        return sm

MainApp().run()

Upvotes: 0

320V
320V

Reputation: 292

You need to ediot your .kv file like that:

KV = """
<PresenzeScreen>:
        MDBottomNavigation:
                panel_color: .2, .2, .2, 1
                MDBottomNavigationItem:
                        name: 'screen 1'
                        text: 'Presenze'
                        on_enter: root.switch()     
                        MDLabel:
                                text: 'Ci sei riuscito finalmente'
                                haling: 'center'                   
                MDBottomNavigationItem:
                        name: 'screen 2'
                        text: 'Test'
                        MDLabel:
                                text: 'Qua ci sono i test'
                                halign: 'center'
                MDBottomNavigationItem:
                        name: 'screen 3'
                        text: 'Orari'
                        MDLabel:
                                text: 'Qua ci sono gli orari degli allenamenti'
                                halign: 'center'
<Manager>:
        id: screen_manager
        presenze: presenze 
        PresenzeScreen:
                id: presenze
                name: 'presenze'
                manager: screen_manager
"""

Upvotes: 1

Related Questions