[英]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)
, nocache为True ,然后通过绑定on_load
将颜色设置回来。 这在我的情况下非常有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.