Skip to content Skip to sidebar Skip to footer

Kivy Python: Buttons And Classes For Multiple Screens

I have a problem with my Kivy Python Code. I have 2 screens: 1st is to navigate to the second screen and on the 2nd screen there is a button to add text to a scrollview...navigatin

Solution 1:

The error occurred because self.root.ids gets access to widgets located in the root widget of the main class. To access the secondary screen elements, you need to add it to the main class (in your case, in ScreenManager) and set its id. Also, you have a lot of imported excess, so that it is clearly visible, I advise you to use Pycharm or something like that.

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder

kv = """
<MenuScreen>:
    name: 'mainmenu'
    BoxLayout:
        spacing: 1
        orientation: "vertical"

        Label:
            text: "MAIN MENU"
        Button:
            text: 'Go to Screen 2'
            on_release: 
                root.manager.current = 'screen2'
                root.manager.transition.direction = "left"
        Button:
            text: 'Quit'
            on_release: root.manager.current = app.exit_software()


<Screen2>:
    name: 'screen2'
    BoxLayout:
        spacing: 1
        orientation: "vertical"

        ScrollView:
            id: scroll_view
            always_overscroll: False
            BoxLayout:
                size_hint_y: None
                height: self.minimum_height
                orientation: 'vertical'
                Label:
                    id: label
                    text: "You can add some Text here by pressing the button"
                    size_hint: None, None
                    size: self.texture_size 
        Button:
            text: 'Add text!'
            size_hint_y: 0.1
            on_release: app.add_text()


        Button:
            text: 'Back to main menu'
            size_hint_y: 0.1
            on_release: 
                root.manager.current = 'mainmenu'
                root.manager.transition.direction = "right"
                

ScreenManager:
    MenuScreen:
        id: menu_scr
        
    Screen2:
        id: scr_2
        
"""


class MenuScreen(Screen):
    pass


class Screen2(Screen):
    pass


class AddTextApp(App):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def build(self):
        return Builder.load_string(kv)

    def add_text(self):
        self.root.ids.scr_2.ids.label.text += f"Some new Text\n"
        self.root.ids.scr_2.ids.scroll_view.scroll_y = 0

    @staticmethod
    def exit_software():
        App.get_running_app().stop()


if __name__ == '__main__':
    AddTextApp().run()

Post a Comment for "Kivy Python: Buttons And Classes For Multiple Screens"