Asignando IDs en Kivy en el lado de Python

Estoy usando Kivy. lo que estoy tratando de hacer es tener una ‘idea’, un control deslizante y una etiqueta que contiene el valor actual del control deslizante en una fila en un diseño de cuadrícula

ahora obtener el diseño está bien, pero hacer que la etiqueta tenga un valor de texto igual al valor actual del control deslizante es complicado. Estoy tratando de usar la concentración de cadenas para referirme a la etiqueta con el mismo sufijo numérico que el control deslizante con el que está emparejado.

Creo que el problema que tengo es que bash asignar identificaciones en el lado de python cuando normalmente tienen que hacerse en el lado de kv. Es eso o el hecho de que los ID que estoy asignando sean cadenas cuando kv normalmente esperaría texto sin formato. Cualquier ayuda sería apreciada

class ScatterTextWidget(FloatLayout): def run_me(self): r=1 main_list=self.ids.main_list main_list.clear_widgets() main_list.height=0 for idea in imported_ideas: main_list.add_widget(Label(text=idea,color=(0,0,0,1),id='idea_label_'+str(r))) main_list.add_widget(Slider(id='Slider_'+str(r),min=0,max=10,value=5, step=1,on_value_pos=self.slider_slid(self))) main_list.add_widget(Label(color=(0,0,0,1),id='value_label_'+str(r))) value_label=self.ids['value_label_'+str(r)] # get this working and then apply the method into slider slid value_label.text='xxx' main_list.height+=35 r +=1 button_1=self.ids.button_1 button_1.text='Begin' button_1.bind(on_press=self.begin) def slider_slid(self,sender): s=str(sender.id) value_label=self.ids['value_label_'+str(s[12:])] value_label.text=str(sender.value) 

value_label = self.ids [‘value_label _’ + str (s [12:])] KeyError: ‘value_label_’

self.ids solo recostack los self.ids de los hijos en la regla de lenguaje kv del widget. No sabe acerca de los widgets que agregó a través de python.

Aunque no necesitas usar la identificación. En este caso, podría guardar, por ejemplo, un diccionario de claves de ID -> widgets.

 self.keys_dict = {} for idea in imported_ideas: new_widget = Label(color=(0,0,0,1),id='value_label_'+str(r))) main_list.add_widget(new_widget) self.keys_dict['value_label_' + str(r)] = new_widget 

Luego, más tarde, puedes acceder a él con self.keys_dict['value_label_' + str(s[12:])] o lo que quieras.

Supongo que, en la práctica, también podría modificar el diccionario de identificadores reales de la misma manera, aunque subjetivamente creo que es preferible mantener su propio diccionario con un nombre que represente sus contenidos más específicos.