为什么以及由谁来调用这个方法?

时间:2015-05-26 09:49:08

标签: python kivy

我用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文件,但没有。

如果有人能给我一个提示,我会很感激,为什么要调用这个方法!

1 个答案:

答案 0 :(得分:1)

on_memory_data ObjectProperty更改时(即,当它引用的对象被替换时,它不知道对象的内部更改),将调用

memory_data。这是kivy属性的自动行为。