Kivy: загрузка AsyncImage во второй раз вызывает ReferenceError - PullRequest
0 голосов
/ 03 марта 2020

Я использую базу данных в реальном времени ( Firebase ), в которой хранятся URL-адреса изображений (и другие элементы), мое приложение извлекает данные из базы данных и отображает их на некоторых виджетах. Не могу опубликовать весь код здесь, потому что он очень длинный.

Мой класс AsyncImage выглядит так:

...
class MyAsyncImage(AsyncImage):
    def __int__(self, **kwargs):
        super(MyAsyncImage, self).__init__(**kwargs)
        Clock.schedule_interval(self.set_image_source, 1/30)

    def set_image_source(self, dt):
        self.source = itemArray[3] #The image url is stored in this array
...

затем внутри моего файла .kv у меня есть:

<ViewContent@RelativeLayout>:
    ...
    GridLayout:
        spacing: 10
        cols: 2
        size_hint_y: None
        height: 100

        MyAsyncImage:
            size: self.texture_size
            pos: self.pos

код работает только один раз, я могу найти элемент, а затем отобразить его содержимое (включая изображение) на моих виджетах. Когда я go возвращаюсь и ищу другой элемент, обновленное содержимое отображается на виджетах как обычно ... но при загрузке изображения возникает ошибка ReferenceError ( слабо объект, на который есть ссылки, больше не существует найдите другой элемент, вот код:

class FirstLabel(Label):
    def __init__(self, **kwargs):
        super(FirstLabel, self).__init__(**kwargs)
        self.size_hint = (.7, None)
        self.height = 60
        self.markup = True
        Clock.schedule_interval(self.set_text, 1/30)


    def set_text(self, dt):
        if itemArray[0] != "":
            self.text =  itemArray[0] #this works

Я пытался сделать сильный реф, используя метод id.__self__, он не работает. Кроме того, определение метода доступа, который возвращает источник, а затем установка source: self.get_image_source() в файле .kv, работает ... но только один раз. Затем я получаю ReferenceError . Даже добавление и удаление виджета AsyncImage дает те же результаты ... та же ошибка. Это вызывает у меня серьезную головную боль.

Буду признателен за любую помощь, я уже давно ищу решение ... безуспешно. И я не могу продолжить свой проект, если ошибка не устранена. Пожалуйста, помогите.

Большое спасибо.

...