我用kivy开始我的第一步,并尝试通过matplotlib或pygal绘制在TextInput中输入的函数。只要我将图像保存在磁盘上,两者都可以正常工作。为了加快程序,我不希望图像写入和读取磁盘。我在mornie.org上找到了以下解决方案:
class MemoryImage(Image):
"""Display an image already loaded in memory."""
memory_data = ObjectProperty(None)
def __init__(self, memory_data, **kwargs):
super(MemoryImage, self).__init__(**kwargs)
self.memory_data = memory_data
def on_memory_data(self, *args):
"""Load image from memory."""
data = StringIO.StringIO(self.memory_data)
with self.canvas:
self.texture = ImageLoaderPygame(data).texture
通过随机更改单词直到它在python3下运行,我找到了这个解决方案:
class MemoryImage(Image):
"""Quelle: https://mornie.org/blog/2013/11/06/how-load-image-memory-kivy/"""
memory_data = ObjectProperty(None)
def __init__(self,memory_data,**kwargs):
"""Display an image already loaded in memory."""
super(MemoryImage, self).__init__(**kwargs)
self.memory_data = memory_data
def on_memory_data(self, *args):
"""Load image from memory."""
data = BytesIO(self.memory_data)
with self.canvas:
self.texture = ImageLoaderPygame(filename="test.png",rawdata=data, ext="png", inline=True).texture
只要我不尝试更新图像,此解决方案就可以正常运行。不幸的是,这是我的意图。所以我试着去理解这堂课。但是我不能 - 而且在前面我是OOP的原始新兵 - 找到一个调用这个on_memory_data方法的点。首先,我搜索了这个类的父母,然后我grep kivy,最后我的整个/ usr文件夹中包含' on_memory'的python文件,但没有。
如果有人能给我一个提示,我会很感激,为什么要调用这个方法!
答案 0 :(得分:1)
on_memory_data
ObjectProperty更改时(即,当它引用的对象被替换时,它不知道对象的内部更改),将调用 memory_data
。这是kivy属性的自动行为。