Python, kivy, как на кнопку повесить обработчик, чтобы ссылался на ключ json
Создаю кнопки циклом по json, при нажатии открывается TextInput, где нужно редактировать значение, переданное в текст кнопки, но как передать ключ из json, ума не приложу. Долго искал похожие вопросы, но пока не нашел.
from kivy.storage.jsonstore import JsonStore
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
class Menu(Screen):
def __init__(self, *args, **kwargs):
super(Menu, self).__init__(*args, **kwargs)
self.bl = GridLayout(cols=1, spacing=3)
store = JsonStore('fl.json')
for item in store.find():
self.back_button = Button(text=str(item[1]['value_1']), on_press=lambda x: set_screen(name_screen='kalk'),
on_release=self.ppp)
self.bl.add_widget(self.back_button)
self.add_widget(self.bl)
def ppp(self, x):
print(self.back_button.text)
class Inp(Screen):
def __init__(self, *args, **kwargs):
super(Inp, self).__init__(*args, **kwargs)
self.bl = BoxLayout(orientation='vertical')
gl = GridLayout(cols=2, size_hint=[1, 0.1], pos_hint= {"center_x": 0.5, "top": 1})
gl.add_widget(Button(text='Назад', size_hint=[1, 1], pos_hint= {"x":0, "top":1},
on_press=lambda x: set_screen(name_screen='menu')))
gl.add_widget(Button(text='Сохранить', size_hint=[1, 1], pos_hint= {"x":0, "top":1}))
fl = FloatLayout()
fl.add_widget(TextInput())
self.bl.add_widget(gl)
self.bl.add_widget(fl)
self.add_widget(self.bl)
def set_screen(name_screen):
sm.current = name_screen
return sm.current
sm = ScreenManager()
sm.add_widget(Menu(name='menu'))
sm.add_widget(Inp(name='kalk'))
class BoxApp(App):
store = JsonStore('fl.json')
store.put('Example: 1', value_1='Rating: 1', value_2=10)
store.put('Example: 2', value_1='Rating: 2', value_2=13)
store.put('Example: 3', value_1='Rating: 3', value_2=32)
store.put('Example: 4', value_1='Rating: 4', value_2=24)
store.put('Example: 5', value_1='Rating: 5', value_2=23)
def __init__(self, *args, **kwargs):
super(BoxApp, self).__init__(*args, **kwargs)
def build(self):
return sm
if __name__ == "__main__":
BoxApp().run()