Как назначить действие для кнопки в 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()