#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)
Вывод
Комментарии:
1. Попробуйте это, и это тоже не сработает, хотя это выполняет регистрацию продукта, во время перехода к экрану, где я показываю эти данные, программа показывает данные, которые я прочитал, когда класс был выполнен в начале. спасибо
2. У меня это прекрасно работает. Можете ли вы поделиться экраном печати того, что не работает? У вашего приложения возникли проблемы с отображением обновленных данных в RV?
3. Это мой проект, github.com/sbritos58/Imagine Программа предназначена для моего первого годичного проекта по программированию, и я выбрал kivy, думая, что это будет наиболее практично. программа на испанском языке, что она позволяет сделать, это создать пожертвование у пользователя и иметь возможность запросить его у другого типа пользователей с recycleview. Если вы заметили, что после ввода пожертвования оно не отображается, когда вы хотите увидеть его в качестве одаряемого, не выходя из программы. Вы очень любезны, что помогли мне. Спасибо.