python- Kivy Screen Manager within .py file












0














I am building a multiple screen App with Kivy and I would like to use the ScreenManager to navigate between the multiple screens. I have seen examples and documentation for how to create the screens within a .kv file, but I want to know how to create them within the .py file.




  • Problem: When I create the screen subclasses as shown below, my app
    window returns a blank screen.

  • Question: What is the correct way to
    create the Screen subclasses within a .py file?


Right now I have two Screen subclasses defined: 'welcomeScreen', and 'functionScreen'. Each consists of a layout with some widgets.



kivy.require('1.9.1')
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
import kivy.uix.boxlayout
import kivy.uix.button
from kivy.uix.screenmanager import ScreenManager, Screen

class PanelBuilderApp(App): # display the welcome screen

def build(self):
# Create the screen manager and add widgets to the base sm widget
sm = kivy.uix.screenmanager.ScreenManager()
sm.add_widget(Screen(name='welcomeScreen'))
sm.add_widget(Screen(name='functionScreen'))
# sm.current= 'welcomeScreen'
return sm

class welcomeScreen(Screen): #welcomeScreen subclass

def __init__(self, **kwargs): #constructor method
super(welcomeScreen, self).__init__(**kwargs) #init parent
welcomePage = FloatLayout()
box = kivy.uix.boxlayout.BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})

welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
welcomeBox = kivy.uix.button.Button(text= 'Click to continue')
welcomeBox.bind(on_press= self.callback)
welcomeBox2 = kivy.uix.button.Button(text='not used')

welcomePage.add_widget(welcomeLabel)
box.add_widget(welcomeBox)
box.add_widget(welcomeBox2)
welcomePage.add_widget(box)
self.add_widget(welcomePage)

def callback(instance):
print('The button has been pressed')
sm.switch_to(Screen(name= 'functionScreen'))
# sm.current = Screen(name= 'functionScreen')

class functionScreen(Screen): #For later function navigation

def __init__(self, **kwargs): #constructor method
super(functionScreen, self).__init__(**kwargs) #init parent
functionPage = kivy.uix.floatlayout.FloatLayout()

functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
halign='center', valign='center', size_hint=(0.4,0.2), pox_hint={'top': 1, 'center_x': 0.5})

functionPage.add_widget(functionLabel)
self.add_widget(functionPage)

# sm.add_widget('Name') #Add more names later when you create more screens
# OR#
# for i in ScreenDirectory:
# sm.add_widget(ScreenDirectory[i])

PanelBuilderApp().run()
if __name__ == '__main__':
pass


I understand I can add the definitions to a .kv file, and I will probably do this as the app grows. However, I like being explicit as I am learning how to use kivy.










share|improve this question



























    0














    I am building a multiple screen App with Kivy and I would like to use the ScreenManager to navigate between the multiple screens. I have seen examples and documentation for how to create the screens within a .kv file, but I want to know how to create them within the .py file.




    • Problem: When I create the screen subclasses as shown below, my app
      window returns a blank screen.

    • Question: What is the correct way to
      create the Screen subclasses within a .py file?


    Right now I have two Screen subclasses defined: 'welcomeScreen', and 'functionScreen'. Each consists of a layout with some widgets.



    kivy.require('1.9.1')
    import kivy
    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.uix.floatlayout import FloatLayout
    import kivy.uix.boxlayout
    import kivy.uix.button
    from kivy.uix.screenmanager import ScreenManager, Screen

    class PanelBuilderApp(App): # display the welcome screen

    def build(self):
    # Create the screen manager and add widgets to the base sm widget
    sm = kivy.uix.screenmanager.ScreenManager()
    sm.add_widget(Screen(name='welcomeScreen'))
    sm.add_widget(Screen(name='functionScreen'))
    # sm.current= 'welcomeScreen'
    return sm

    class welcomeScreen(Screen): #welcomeScreen subclass

    def __init__(self, **kwargs): #constructor method
    super(welcomeScreen, self).__init__(**kwargs) #init parent
    welcomePage = FloatLayout()
    box = kivy.uix.boxlayout.BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
    padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})

    welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
    halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
    welcomeBox = kivy.uix.button.Button(text= 'Click to continue')
    welcomeBox.bind(on_press= self.callback)
    welcomeBox2 = kivy.uix.button.Button(text='not used')

    welcomePage.add_widget(welcomeLabel)
    box.add_widget(welcomeBox)
    box.add_widget(welcomeBox2)
    welcomePage.add_widget(box)
    self.add_widget(welcomePage)

    def callback(instance):
    print('The button has been pressed')
    sm.switch_to(Screen(name= 'functionScreen'))
    # sm.current = Screen(name= 'functionScreen')

    class functionScreen(Screen): #For later function navigation

    def __init__(self, **kwargs): #constructor method
    super(functionScreen, self).__init__(**kwargs) #init parent
    functionPage = kivy.uix.floatlayout.FloatLayout()

    functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
    halign='center', valign='center', size_hint=(0.4,0.2), pox_hint={'top': 1, 'center_x': 0.5})

    functionPage.add_widget(functionLabel)
    self.add_widget(functionPage)

    # sm.add_widget('Name') #Add more names later when you create more screens
    # OR#
    # for i in ScreenDirectory:
    # sm.add_widget(ScreenDirectory[i])

    PanelBuilderApp().run()
    if __name__ == '__main__':
    pass


    I understand I can add the definitions to a .kv file, and I will probably do this as the app grows. However, I like being explicit as I am learning how to use kivy.










    share|improve this question

























      0












      0








      0







      I am building a multiple screen App with Kivy and I would like to use the ScreenManager to navigate between the multiple screens. I have seen examples and documentation for how to create the screens within a .kv file, but I want to know how to create them within the .py file.




      • Problem: When I create the screen subclasses as shown below, my app
        window returns a blank screen.

      • Question: What is the correct way to
        create the Screen subclasses within a .py file?


      Right now I have two Screen subclasses defined: 'welcomeScreen', and 'functionScreen'. Each consists of a layout with some widgets.



      kivy.require('1.9.1')
      import kivy
      from kivy.app import App
      from kivy.uix.label import Label
      from kivy.uix.floatlayout import FloatLayout
      import kivy.uix.boxlayout
      import kivy.uix.button
      from kivy.uix.screenmanager import ScreenManager, Screen

      class PanelBuilderApp(App): # display the welcome screen

      def build(self):
      # Create the screen manager and add widgets to the base sm widget
      sm = kivy.uix.screenmanager.ScreenManager()
      sm.add_widget(Screen(name='welcomeScreen'))
      sm.add_widget(Screen(name='functionScreen'))
      # sm.current= 'welcomeScreen'
      return sm

      class welcomeScreen(Screen): #welcomeScreen subclass

      def __init__(self, **kwargs): #constructor method
      super(welcomeScreen, self).__init__(**kwargs) #init parent
      welcomePage = FloatLayout()
      box = kivy.uix.boxlayout.BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
      padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})

      welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
      halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
      welcomeBox = kivy.uix.button.Button(text= 'Click to continue')
      welcomeBox.bind(on_press= self.callback)
      welcomeBox2 = kivy.uix.button.Button(text='not used')

      welcomePage.add_widget(welcomeLabel)
      box.add_widget(welcomeBox)
      box.add_widget(welcomeBox2)
      welcomePage.add_widget(box)
      self.add_widget(welcomePage)

      def callback(instance):
      print('The button has been pressed')
      sm.switch_to(Screen(name= 'functionScreen'))
      # sm.current = Screen(name= 'functionScreen')

      class functionScreen(Screen): #For later function navigation

      def __init__(self, **kwargs): #constructor method
      super(functionScreen, self).__init__(**kwargs) #init parent
      functionPage = kivy.uix.floatlayout.FloatLayout()

      functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
      halign='center', valign='center', size_hint=(0.4,0.2), pox_hint={'top': 1, 'center_x': 0.5})

      functionPage.add_widget(functionLabel)
      self.add_widget(functionPage)

      # sm.add_widget('Name') #Add more names later when you create more screens
      # OR#
      # for i in ScreenDirectory:
      # sm.add_widget(ScreenDirectory[i])

      PanelBuilderApp().run()
      if __name__ == '__main__':
      pass


      I understand I can add the definitions to a .kv file, and I will probably do this as the app grows. However, I like being explicit as I am learning how to use kivy.










      share|improve this question













      I am building a multiple screen App with Kivy and I would like to use the ScreenManager to navigate between the multiple screens. I have seen examples and documentation for how to create the screens within a .kv file, but I want to know how to create them within the .py file.




      • Problem: When I create the screen subclasses as shown below, my app
        window returns a blank screen.

      • Question: What is the correct way to
        create the Screen subclasses within a .py file?


      Right now I have two Screen subclasses defined: 'welcomeScreen', and 'functionScreen'. Each consists of a layout with some widgets.



      kivy.require('1.9.1')
      import kivy
      from kivy.app import App
      from kivy.uix.label import Label
      from kivy.uix.floatlayout import FloatLayout
      import kivy.uix.boxlayout
      import kivy.uix.button
      from kivy.uix.screenmanager import ScreenManager, Screen

      class PanelBuilderApp(App): # display the welcome screen

      def build(self):
      # Create the screen manager and add widgets to the base sm widget
      sm = kivy.uix.screenmanager.ScreenManager()
      sm.add_widget(Screen(name='welcomeScreen'))
      sm.add_widget(Screen(name='functionScreen'))
      # sm.current= 'welcomeScreen'
      return sm

      class welcomeScreen(Screen): #welcomeScreen subclass

      def __init__(self, **kwargs): #constructor method
      super(welcomeScreen, self).__init__(**kwargs) #init parent
      welcomePage = FloatLayout()
      box = kivy.uix.boxlayout.BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
      padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})

      welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
      halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
      welcomeBox = kivy.uix.button.Button(text= 'Click to continue')
      welcomeBox.bind(on_press= self.callback)
      welcomeBox2 = kivy.uix.button.Button(text='not used')

      welcomePage.add_widget(welcomeLabel)
      box.add_widget(welcomeBox)
      box.add_widget(welcomeBox2)
      welcomePage.add_widget(box)
      self.add_widget(welcomePage)

      def callback(instance):
      print('The button has been pressed')
      sm.switch_to(Screen(name= 'functionScreen'))
      # sm.current = Screen(name= 'functionScreen')

      class functionScreen(Screen): #For later function navigation

      def __init__(self, **kwargs): #constructor method
      super(functionScreen, self).__init__(**kwargs) #init parent
      functionPage = kivy.uix.floatlayout.FloatLayout()

      functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
      halign='center', valign='center', size_hint=(0.4,0.2), pox_hint={'top': 1, 'center_x': 0.5})

      functionPage.add_widget(functionLabel)
      self.add_widget(functionPage)

      # sm.add_widget('Name') #Add more names later when you create more screens
      # OR#
      # for i in ScreenDirectory:
      # sm.add_widget(ScreenDirectory[i])

      PanelBuilderApp().run()
      if __name__ == '__main__':
      pass


      I understand I can add the definitions to a .kv file, and I will probably do this as the app grows. However, I like being explicit as I am learning how to use kivy.







      python kivy screen subclass






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 20 at 4:47









      J.Vo

      32




      32
























          1 Answer
          1






          active

          oldest

          votes


















          0














          I think you think using Screen(name='welcomeScreen') you are using welcomeScreen but that is not true, if you want to use welcomeScreen you should use it directly.



          On the other hand you have typographical errors so I have corrected, I recommend you follow the kivy tutorials, obviously you must have a solid OOP base (and I think you do not have it so your task is to reinforce).



          import kivy
          kivy.require('1.9.1')
          from kivy.app import App
          from kivy.uix.label import Label
          from kivy.uix.floatlayout import FloatLayout
          from kivy.uix.boxlayout import BoxLayout
          from kivy.uix.button import Button
          from kivy.uix.screenmanager import ScreenManager, Screen

          class PanelBuilderApp(App): # display the welcome screen
          def build(self):
          sm = ScreenManager()
          sm.add_widget(WelcomeScreen(name='welcomeScreen'))
          sm.add_widget(FunctionScreen(name='functionScreen'))
          return sm

          class WelcomeScreen(Screen): #welcomeScreen subclass
          def __init__(self, **kwargs): #constructor method
          super(WelcomeScreen, self).__init__(**kwargs) #init parent
          welcomePage = FloatLayout()
          box = BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
          padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})
          welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
          halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
          welcomeBox = Button(text= 'Click to continue', on_press=self.callback)
          welcomeBox2 = Button(text='not used')

          welcomePage.add_widget(welcomeLabel)
          box.add_widget(welcomeBox)
          box.add_widget(welcomeBox2)
          welcomePage.add_widget(box)
          self.add_widget(welcomePage)

          def callback(self, instance):
          print('The button has been pressed')
          self.manager.current = 'functionScreen'

          class FunctionScreen(Screen): #For later function navigation
          def __init__(self, **kwargs): #constructor method
          super(FunctionScreen, self).__init__(**kwargs) #init parent
          functionPage = FloatLayout()
          functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
          halign='center', valign='center', size_hint=(0.4,0.2), pos_hint={'top': 1, 'center_x': 0.5})
          functionPage.add_widget(functionLabel)
          self.add_widget(functionPage)

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


          enter image description here



          enter image description here






          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386394%2fpython-kivy-screen-manager-within-py-file%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            I think you think using Screen(name='welcomeScreen') you are using welcomeScreen but that is not true, if you want to use welcomeScreen you should use it directly.



            On the other hand you have typographical errors so I have corrected, I recommend you follow the kivy tutorials, obviously you must have a solid OOP base (and I think you do not have it so your task is to reinforce).



            import kivy
            kivy.require('1.9.1')
            from kivy.app import App
            from kivy.uix.label import Label
            from kivy.uix.floatlayout import FloatLayout
            from kivy.uix.boxlayout import BoxLayout
            from kivy.uix.button import Button
            from kivy.uix.screenmanager import ScreenManager, Screen

            class PanelBuilderApp(App): # display the welcome screen
            def build(self):
            sm = ScreenManager()
            sm.add_widget(WelcomeScreen(name='welcomeScreen'))
            sm.add_widget(FunctionScreen(name='functionScreen'))
            return sm

            class WelcomeScreen(Screen): #welcomeScreen subclass
            def __init__(self, **kwargs): #constructor method
            super(WelcomeScreen, self).__init__(**kwargs) #init parent
            welcomePage = FloatLayout()
            box = BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
            padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})
            welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
            halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
            welcomeBox = Button(text= 'Click to continue', on_press=self.callback)
            welcomeBox2 = Button(text='not used')

            welcomePage.add_widget(welcomeLabel)
            box.add_widget(welcomeBox)
            box.add_widget(welcomeBox2)
            welcomePage.add_widget(box)
            self.add_widget(welcomePage)

            def callback(self, instance):
            print('The button has been pressed')
            self.manager.current = 'functionScreen'

            class FunctionScreen(Screen): #For later function navigation
            def __init__(self, **kwargs): #constructor method
            super(FunctionScreen, self).__init__(**kwargs) #init parent
            functionPage = FloatLayout()
            functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
            halign='center', valign='center', size_hint=(0.4,0.2), pos_hint={'top': 1, 'center_x': 0.5})
            functionPage.add_widget(functionLabel)
            self.add_widget(functionPage)

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


            enter image description here



            enter image description here






            share|improve this answer


























              0














              I think you think using Screen(name='welcomeScreen') you are using welcomeScreen but that is not true, if you want to use welcomeScreen you should use it directly.



              On the other hand you have typographical errors so I have corrected, I recommend you follow the kivy tutorials, obviously you must have a solid OOP base (and I think you do not have it so your task is to reinforce).



              import kivy
              kivy.require('1.9.1')
              from kivy.app import App
              from kivy.uix.label import Label
              from kivy.uix.floatlayout import FloatLayout
              from kivy.uix.boxlayout import BoxLayout
              from kivy.uix.button import Button
              from kivy.uix.screenmanager import ScreenManager, Screen

              class PanelBuilderApp(App): # display the welcome screen
              def build(self):
              sm = ScreenManager()
              sm.add_widget(WelcomeScreen(name='welcomeScreen'))
              sm.add_widget(FunctionScreen(name='functionScreen'))
              return sm

              class WelcomeScreen(Screen): #welcomeScreen subclass
              def __init__(self, **kwargs): #constructor method
              super(WelcomeScreen, self).__init__(**kwargs) #init parent
              welcomePage = FloatLayout()
              box = BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
              padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})
              welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
              halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
              welcomeBox = Button(text= 'Click to continue', on_press=self.callback)
              welcomeBox2 = Button(text='not used')

              welcomePage.add_widget(welcomeLabel)
              box.add_widget(welcomeBox)
              box.add_widget(welcomeBox2)
              welcomePage.add_widget(box)
              self.add_widget(welcomePage)

              def callback(self, instance):
              print('The button has been pressed')
              self.manager.current = 'functionScreen'

              class FunctionScreen(Screen): #For later function navigation
              def __init__(self, **kwargs): #constructor method
              super(FunctionScreen, self).__init__(**kwargs) #init parent
              functionPage = FloatLayout()
              functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
              halign='center', valign='center', size_hint=(0.4,0.2), pos_hint={'top': 1, 'center_x': 0.5})
              functionPage.add_widget(functionLabel)
              self.add_widget(functionPage)

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


              enter image description here



              enter image description here






              share|improve this answer
























                0












                0








                0






                I think you think using Screen(name='welcomeScreen') you are using welcomeScreen but that is not true, if you want to use welcomeScreen you should use it directly.



                On the other hand you have typographical errors so I have corrected, I recommend you follow the kivy tutorials, obviously you must have a solid OOP base (and I think you do not have it so your task is to reinforce).



                import kivy
                kivy.require('1.9.1')
                from kivy.app import App
                from kivy.uix.label import Label
                from kivy.uix.floatlayout import FloatLayout
                from kivy.uix.boxlayout import BoxLayout
                from kivy.uix.button import Button
                from kivy.uix.screenmanager import ScreenManager, Screen

                class PanelBuilderApp(App): # display the welcome screen
                def build(self):
                sm = ScreenManager()
                sm.add_widget(WelcomeScreen(name='welcomeScreen'))
                sm.add_widget(FunctionScreen(name='functionScreen'))
                return sm

                class WelcomeScreen(Screen): #welcomeScreen subclass
                def __init__(self, **kwargs): #constructor method
                super(WelcomeScreen, self).__init__(**kwargs) #init parent
                welcomePage = FloatLayout()
                box = BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
                padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})
                welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
                halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
                welcomeBox = Button(text= 'Click to continue', on_press=self.callback)
                welcomeBox2 = Button(text='not used')

                welcomePage.add_widget(welcomeLabel)
                box.add_widget(welcomeBox)
                box.add_widget(welcomeBox2)
                welcomePage.add_widget(box)
                self.add_widget(welcomePage)

                def callback(self, instance):
                print('The button has been pressed')
                self.manager.current = 'functionScreen'

                class FunctionScreen(Screen): #For later function navigation
                def __init__(self, **kwargs): #constructor method
                super(FunctionScreen, self).__init__(**kwargs) #init parent
                functionPage = FloatLayout()
                functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
                halign='center', valign='center', size_hint=(0.4,0.2), pos_hint={'top': 1, 'center_x': 0.5})
                functionPage.add_widget(functionLabel)
                self.add_widget(functionPage)

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


                enter image description here



                enter image description here






                share|improve this answer












                I think you think using Screen(name='welcomeScreen') you are using welcomeScreen but that is not true, if you want to use welcomeScreen you should use it directly.



                On the other hand you have typographical errors so I have corrected, I recommend you follow the kivy tutorials, obviously you must have a solid OOP base (and I think you do not have it so your task is to reinforce).



                import kivy
                kivy.require('1.9.1')
                from kivy.app import App
                from kivy.uix.label import Label
                from kivy.uix.floatlayout import FloatLayout
                from kivy.uix.boxlayout import BoxLayout
                from kivy.uix.button import Button
                from kivy.uix.screenmanager import ScreenManager, Screen

                class PanelBuilderApp(App): # display the welcome screen
                def build(self):
                sm = ScreenManager()
                sm.add_widget(WelcomeScreen(name='welcomeScreen'))
                sm.add_widget(FunctionScreen(name='functionScreen'))
                return sm

                class WelcomeScreen(Screen): #welcomeScreen subclass
                def __init__(self, **kwargs): #constructor method
                super(WelcomeScreen, self).__init__(**kwargs) #init parent
                welcomePage = FloatLayout()
                box = BoxLayout(orientation='vertical', size_hint=(0.4, 0.3),
                padding=8, pos_hint={'top': 0.5, 'center_x': 0.5})
                welcomeLabel = Label(text='Hello and welcome to the Panel Builder version 1.0.nApp by John VorstennClick below to continue',
                halign= 'center', valign= 'center', size_hint= (0.4, 0.2), pos_hint= {'top': 1, 'center_x': 0.5})
                welcomeBox = Button(text= 'Click to continue', on_press=self.callback)
                welcomeBox2 = Button(text='not used')

                welcomePage.add_widget(welcomeLabel)
                box.add_widget(welcomeBox)
                box.add_widget(welcomeBox2)
                welcomePage.add_widget(box)
                self.add_widget(welcomePage)

                def callback(self, instance):
                print('The button has been pressed')
                self.manager.current = 'functionScreen'

                class FunctionScreen(Screen): #For later function navigation
                def __init__(self, **kwargs): #constructor method
                super(FunctionScreen, self).__init__(**kwargs) #init parent
                functionPage = FloatLayout()
                functionLabel = Label(text='Welcome to the function page. Here you will choose what functions to use',
                halign='center', valign='center', size_hint=(0.4,0.2), pos_hint={'top': 1, 'center_x': 0.5})
                functionPage.add_widget(functionLabel)
                self.add_widget(functionPage)

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


                enter image description here



                enter image description here







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 20 at 6:50









                eyllanesc

                73.2k103056




                73.2k103056






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386394%2fpython-kivy-screen-manager-within-py-file%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

                    Alcedinidae

                    Origin of the phrase “under your belt”?