如何将图像加载到RAM中以供以后在.kv文件中使用(Kivy + Python)

时间:2019-03-11 08:35:08

标签: python image kivy

问题:

我需要找到一种预加载我的.png文件的方法,因为在我的代码的某些点上,应为按钮的图形显示为黑色正方形,而在其他点(完全相同的代码),它们可以正常工作。 我想在启动时在python类中执行此操作,然后将它们附加到我的.kv文件中。 症结在于,我使用source:并“预加载”像'assets/graphics/buttons/newImg.png'这样的字符串将存储字符串,而不是图像。而且,如果我以其他方式加载图像,我将不知道以后如何将其附加到按钮上。

任何提示和/或想法都会受到赞赏!

背景

我这样创建按钮:

<MyButton@ButtonBehavior+Image>
    widgetTarget: ''
    source: 'assets/graphics/buttons/' + self.widgetTarget + '.png'
    on_press:
        self.source = 'assets/graphics/buttons/' + self.widgetTarget + '_clicked.png'
    on_release:
        self.source = 'assets/graphics/buttons/' + self.widgetTarget + '.png'

并在我的.kv文件中像这样使用它:

CustomButtonNoTarget:
        id: meIsButton
        widgetTarget: 'stopSign'
        on_release:
           *do stuff here*

在大多数情况下,它就像一个超级按钮,但是在程序流程的某些点上,不是图像而是仅出现黑色正方形(相同大小)。

因为完全相同的代码在程序流程中的其他位置起作用,所以我将重点放在图像上: 我测试了: 不同的图像-不同的图像类型-不同的图像大小

->所有结果完全相同。

然后我偶然发现了一个提示:如果我在出现问题的位置之前使用了相同的图形,则稍后可以完美地加载它。因此,我认为问题在于-为什么这么少在所有位置而不是始终发生这种情况-图像加载得不够快。因为RAM速度更快,所以当所有映像都位于RAM中时,它就可以工作。

所以我要解决的想法是在启动时将所有图像存储在内存中,这导致我回避了所提出的问题。

2 个答案:

答案 0 :(得分:0)

也许您可以在其余代码运行之前先加载所有图像,将它们放在一个不可见的角落?

答案 1 :(得分:0)

在尝试将 gif 图片添加到代码中的ModalView时,我也遇到了这个问题。

我找到的解决方案是使用AsyncImage并将颜色设置为transparent (1,1,1,0),将 nocache 设置为 True ,然后通过绑定on_load设置颜色。在我的情况下,这种方法效果很好。