def update_field_rows(self, source=None): self.fields_container.clear_widgets() self.field_widgets = [] if source: self.view_source = source for field, value in self.view_source.items(): row = BoxLayout() a = Label(text=str(field)) row.add_widget(a) # dropdown? field_input = TextInput( text=str(value), multiline=False, height=a.height, font_size=a.font_size / 1.5, ) field_input.field_for = str(field) field_input.bind( on_text_validate=lambda widget, field=field, value=value: self.update_field( field, widget.text, widget=widget ) ) field_highlight_button = Button(text="$", size_hint_x=.1) field_highlight_button.bind( on_press=lambda widget, field=field: [ self.source_source.set_env_var("$SELECTED_KEY", field), self.highlight_field(), ] ) field_remove_button = Button(text="X", size_hint_x=.1) field_remove_button.bind( on_press=lambda widget, field=field: self.remove_field(field) ) row.add_widget(field_input) row.highlight = field_highlight_button row.field = field row.add_widget(field_highlight_button) row.add_widget(field_remove_button) self.fields_container.add_widget(row) self.field_widgets.append(field_input) self.highlight_field()