Search code examples
pythonkivykivymd

Integration of multiple .kv files


As I am learning kivy/kivymd these days, my questions might be naive, please pardon me for that. I want to create multiple screens in kivy and the definition of each screen to be placed in separate .kv file. At last, I'm creating a main.kv file which has ScreenManager definition and I want to import all the screens defined to this app. Please guide me on how to do this.

Here is my screen1.kv file

<Screen1>:
    name: 'Screen1'
    Label:
        id: first_screen
        text: "Hi I'm The First Screen"

Here is my screen2.kv file

<Screen2>:
    name: 'Screen2'
    Label:
        id: second_screen
        text: "Hi I'm The Second Screen"

Here is my main.kv file

#:kivy 2.1.0
#:include libs.kv.screen1.kv
#:include libs.kv.screen2.kv

ScreenManager:
    Screen:
        name: "main_screen"

        BoxLayout:
            orientation: "vertical"

            Label:
                text: "main screen"
            Button:
                text: "to screen 1"
                on_press: app.root.current = "Screen1"
            Button:
                text: "to screen 2"
                on_press: app.root.current = "Screen2"
    Screen1:
    Screen2:

Please guide on what is the correct way to write main.kv as I'm getting error. Please note, I want to eliminate the python code of ScreenManager.add_widget(Screen1....)


Solution

  • We can create multiple screens defined in different .py files and their .kv definition in separate files. In order to integrate all the files, we can create a main.kv file whose content looks like below:

    #  import the python files defining the Screens
    #: import Screen1 libs.baseclass.screen1.Screen1
    #: import Screen2 libs.baseclass.screen2.Screen2
    
    #  include the kv files for the other Screens
    #: include libs/kvs/screen1.kv
    #: include libs/kvs/screen2.kv
    
    ScreenManager:
        Screen1:
        Screen2:
    

    FInally load this file through Builder in an App.