Как назначить действие для кнопки в python kivy?

создаю кнопки в цикле, но почему действие, которое я им присваиваю работает некорректно. Если проделать тоже самое без цикла то все работает. Подскажите в чем дело.

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import Screen, ScreenManager


nameForTargetMenu = ['Пунктуация', 'Фонетика','Орфография']


class WinWithSpelling(Screen):
    def __init__(self, **kw):
        super(WinWithSpelling, self).__init__(**kw)


class WinWithPoints(Screen):
    def __init__(self, **kw):
        super(WinWithPoints, self).__init__(**kw)

    def on_enter(self):
        layout = FloatLayout()
        ret_button = Button(text="< На главный экран", size_hint=(0.15, 0.1),
                            on_press=lambda x: set_screen('menu'))
        layout.add_widget(ret_button)
        self.add_widget(layout)


class WinWithPhonetics(Screen):
    def __init__(self, **kw):
        super(WinWithPhonetics, self).__init__(**kw)


class MainWindow(Screen):
    def __init__(self, **kw):
        super(MainWindow, self).__init__(**kw)
        layout = FloatLayout()
        i = -0.1
        for el in nameForTargetMenu:
            t = el
            b = Button(text=t, size_hint=(0.5, 0.1),
                       pos_hint={'center_x': 0.5, 'center_y': 1 / len(nameForTargetMenu) + i},
                       on_press=lambda x: set_screen(el))
            layout.add_widget(b)
            i += 1 / len(nameForTargetMenu)
        self.add_widget(layout)


def set_screen(s):
    sm.current = s


sm = ScreenManager()
sm.add_widget(MainWindow(name='menu'))
sm.add_widget(WinWithSpelling(name='Орфография'))
sm.add_widget(WinWithPoints(name='Пунктуация'))
sm.add_widget(WinWithPhonetics(name='Фонетика'))


class MainApp(App):
    def build(self):
        return sm


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


Ответы (0 шт):