Why isn't kv binding of the screen change working?
Question: I've defined two buttons: one in kv and one in Python. They are located in
different screens and are used to navigate between them. What I found strange
is that the button that was defined in Python successfully switched the
screen, while the one defined in kv did not. Perhaps I'm not accessing the
`App` class method properly?  
Here is the code of the issue:

    
    
    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.screenmanager import Screen, ScreenManager
    from kivy.uix.button import Button
    
    Builder.load_string('''
    <MyScreen1>:
        Button:
            id: my_bt
            text: "back"
            on_release: app.back
    ''')
    
    
    class MyScreen1(Screen):
        pass
    
    class TestApp(App):
        def here(self, btn):
            self.sm.current = "back"
    
        def back(self, btn):
            self.sm.current = "here"
    
        def build(self):
            self.sm = ScreenManager()
            s1 = Screen(name = "here")
            bt = Button(text = "here",
                        on_release = self.here)
            s2 = MyScreen1(name = "back")
            #s2.ids['my_bt'].bind(on_release = self.back)
            self.sm.add_widget(s1)
            s1.add_widget(bt)
            self.sm.add_widget(s2)
            return self.sm
    
    TestApp().run()
    

So if I define the switching function in kv (`on_release`), I can't go to the
`"here"` screen. But if I uncomment that line in Python and comment the
`on_release: app.back` instead, everything works fine.  
I'm pretty sure that this is the correct way to access the current app, since
it doesn't give me any errors (which means that the method was successfully
located)


Answer: That's a subtle difference between kv and python: In kv you actually have to
write the [callback as a function call (a python
expression)](https://kivy.org/docs/api-kivy.lang.html#value-expressions-on-
property-expressions-ids-and-reserved-keywords), in this case:

    
    
    on_release: app.back(self)
    

