2015-05-26 4 views
2

Я делаю первые шаги с kivy и пытаюсь построить функции, введенные в TextInput через matplotlib или pygal. Оба работают нормально, пока я сохраняю изображения на диске. Чтобы ускорить работу программы, я не хочу, чтобы изображение записывалось и читалось с диска. Я нашел следующее решение по mornie.org:Почему и кем этот метод называется в kivy

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 

Это решение хорошо работает до тех пор, пока я не пытаюсь обновить изображение. К сожалению, это мое намерение. Поэтому я пытаюсь понять этот класс. Но я не могу - и на фронте я являюсь необработанным рекрутом в ООП - нахожу единственную точку, где вызывается этот метод on_memory_data. Сначала я обыскал родителей этого класса, затем я grep kivy и, наконец, всю папку all/usr для файлов python, содержащих «on_memory», но ничего не происходит.

Я был бы признателен, если бы кто-нибудь мог дать мне подсказку, почему этот метод называется!

+1

Каков размер изображения? – Veltro

+0

640x480! (некоторые дополнительные символы для отправки) – hinerk

ответ

1

on_memory_data вызывается, когда изменяется объект ObjectProperty (то есть когда объект, который он ссылается, заменяется, он не знает о внутренних изменениях объекта). Это автоматическое поведение свойств киви.

+0

Получил это. Я потерялся в документации по API. Теперь я нашел этот пункт в руководстве http://kivy.org/docs/guide/events.html#dispatching-a-property-event – hinerk