Kivy:第二次加载 AsyncImage 引发 ReferenceError

Kivy: Loading AsyncImage second time raises ReferenceError

我正在使用存储图像 URL(和其他项目)的实时数据库 (Firebase),我的应用程序从数据库中获取数据并将其显示在某些小部件。不能 post 所有代码都在这里,因为它很长。

我的 AsyncImage class 是这样的:

...
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

代码只工作一次,我可以搜索一个项目,然后在我的小部件上显示它的内容(包括图像)。当我返回并搜索不同的项目时,更新的内容确实会正常显示在小部件上......但是加载图像会引发 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__ 方法进行强引用,但它不起作用。此外,定义一个 returns 源的访问器方法,然后在 .kv 文件中设置 source: self.get_image_source() ,工作......但只有一次。然后我得到 ReferenceError。即使添加然后删除 AsyncImage 小部件也会产生相同的结果......相同的错误。这让我很头疼。

任何形式的帮助都将不胜感激,我一直在寻找解决方案已经有一段时间了...没有运气。如果错误仍然存​​在,我将无法继续我的项目。请帮忙。

非常感谢。

这是由于使用 Python >= 3.8 时 Kivy 中的错误引起的。

已在代码库中修复。

有几种修复方法:

这里有更多详细信息: https://github.com/kivy/buildozer/issues/1089