繁体   English   中英

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

[英]How to load images into RAM for later use in .kv file (Kivy+Python)

题:

我需要找到一种方法来预加载我的 .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 中时,它可以工作。

所以我解决这个问题的想法是在启动时将所有图像存储在内存中,是什么导致我提出上述问题。

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

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

我找到的解决方案是使用AsyncImage并将颜色设置为transparent (1,1,1,0)nocacheTrue ,然后通过绑定on_load将颜色设置回来。 这在我的情况下非常有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM