Kivy:第二次加载AsyncImage会引发ReferenceError



我使用的是一个实时数据库(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

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

任何形式的帮助都将不胜感激,我已经寻找解决方案很长一段时间了。。。运气不佳。如果错误持续存在,我就无法继续我的项目。请帮忙。

非常感谢。

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

它已在代码库中修复。

有几种方法可以修复它:

  • 将Kivy更新到2.0.0rc3或更高版本
  • 将您正在使用的Python降级为<3.8
  • 手动编辑kivy代码(具体更改如下:https://github.com/kivy/kivy/pull/6595/files)

此处提供更多详细信息:https://github.com/kivy/buildozer/issues/1089

最新更新