Как динамически загружать данные с помощью RecycleView в KIVY, python

#python #python-3.x #kivy

#python #python-3.x #kivy

Вопрос:

Я пытаюсь добавить данные в базу данных sqlite3, чтобы динамически считывать, добавлять и удалять их из RecycleView, но я не могу заставить их загружаться автоматически после загрузки моих данных в базу данных.

Это часть моего кода, которую мне нужно было бы изменить, чтобы заставить ее работать. Большое вам спасибо.

 producto=[]

def cargarproductosbase():
    global producto
    con = sqlite3.connect("base.db")
    cur = con.cursor()
    cur.execute("select nombre from producto")
    print("se cargaron los productos")
    rows = cur.fetchall()
    for row in rows:
        for i in row:
            producto.append(i)
            print(producto)
    con.commit()
    con.close()
    print ("cargue estos datos")
    print (producto)

class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior,
                                 RecycleBoxLayout):
    ''' Adds selection and focus behaviour to the view. '''


class SelectableLabel(RecycleDataViewBehavior, Label):
    ''' Add selection support to the Label '''
    index = None
    selected = BooleanProperty(False)
    selectable = BooleanProperty(True)
    cols=2

    def refresh_view_attrs(self, rv, index, data):
        ''' Catch and handle the view changes '''
        self.index = index
        return super(SelectableLabel, self).refresh_view_attrs(
            rv, index, data)

    def on_touch_down(self, touch):
        ''' Add selection on touch down '''
        if super(SelectableLabel, self).on_touch_down(touch):
            return True
        if self.collide_point(*touch.pos) and self.selectable:
            return self.parent.select_with_touch(self.index, touch)

    def apply_selection(self, rv, index, is_selected):
        ''' Respond to the selection of items in the view. '''
        self.selected = is_selected
        if is_selected:
            aceptar=AceptarDonacion()
            aceptar.open()

            print("selection changed to {0}".format(rv.data[index]))
        else:
            print("selection removed for {0}".format(rv.data[index]))


class ExampleRV(RecycleView):
    global producto
    cargarproductosbase()
    def __init__(self, **kwargs):
        global producto

        super(ExampleRV, self).__init__(**kwargs)

        Clock.schedule_interval(self.reloading, 1)

    def reloading(self, nothing):
        global producto
        self.data = [{'text': str(x)} for x in producto]
        print (producto)
  

Ответ №1:

Создайте экземпляр класса cargarproductosbase() в конструкторе class ExampleRV .

Фрагменты

 class ExampleRV(RecycleView):

    def __init__(self, **kwargs):
        global producto
        super(ExampleRV, self).__init__(**kwargs)
        cargarproductosbase()
        self.data = [{'text': str(x)} for x in producto]
        print(producto)
  

Вывод

RV - загруженные данные

Комментарии:

1. Попробуйте это, и это тоже не сработает, хотя это выполняет регистрацию продукта, во время перехода к экрану, где я показываю эти данные, программа показывает данные, которые я прочитал, когда класс был выполнен в начале. спасибо

2. У меня это прекрасно работает. Можете ли вы поделиться экраном печати того, что не работает? У вашего приложения возникли проблемы с отображением обновленных данных в RV?

3. Это мой проект, github.com/sbritos58/Imagine Программа предназначена для моего первого годичного проекта по программированию, и я выбрал kivy, думая, что это будет наиболее практично. программа на испанском языке, что она позволяет сделать, это создать пожертвование у пользователя и иметь возможность запросить его у другого типа пользователей с recycleview. Если вы заметили, что после ввода пожертвования оно не отображается, когда вы хотите увидеть его в качестве одаряемого, не выходя из программы. Вы очень любезны, что помогли мне. Спасибо.