title: How do I update the Color of a **dynamically added** Ellipse (not using Builder) according to Widget Kivy properties?
body: <p>This is very related to <a href="https://stackoverflow.com/questions/12997545/how-do-i-change-the-color-of-my-widget-in-kivy-at-run-time">this other question</a>. The only difference is that I am adding the Ellipse dynamically with <code>with self.canvas</code> instead of using the Builder (<code>Builder.load_string</code> or <code>Builder.load_file</code>). So here is the code <strong><em>that does work</em></strong>. When you click in the Ellipse it moves and change Color:</p>
  
  <pre><code>from kivy.app import App
  from kivy.lang import Builder
  from kivy.uix.widget import Widget
  from kivy.properties import NumericProperty
  from kivy.graphics import Color, Ellipse
  
  Builder.load_string("""
  &lt;CircleWidget&gt;:
      canvas:
          Color:
              rgba: self.r,1,1,1
          Ellipse:
              pos: self.pos
              size: self.size
  """)
  
  class CircleWidget(Widget):
      r = NumericProperty(0)
      def __init__(s, **kwargs):
          s.size= [50,50]
          s.pos = [100,50]
          super(CircleWidget, s).__init__(**kwargs)
  
      def on_touch_down(s, touch):
          if s.collide_point(touch.x,touch.y):    
              s.pos = [s.pos[1],s.pos[0]]     # this works
              s.r = 1.0                       # this also works
  
  class TestApp(App):
      def build(s):
          parent = Widget()
          parent.add_widget(CircleWidget())
          return parent
  
  if __name__ == '__main__':
      TestApp().run()
  </code></pre>
  
  <p>If I try to do the same without using the <code>Builder</code>, it doesn't work anymore:</p>
  
  <pre><code>from kivy.app import App
  from kivy.lang import Builder
  from kivy.uix.widget import Widget
  from kivy.properties import NumericProperty
  from kivy.graphics import Color, Ellipse
  
  class CircleWidget(Widget):
      r = NumericProperty(0)
      def __init__(s, **kwargs):
          s.size= [50,50]
          s.pos = [100,50]
          super(CircleWidget, s).__init__(**kwargs)
          with s.canvas:
              Color(s.r,1,1,1)
              Ellipse(pos = s.pos, size = s.size)
  
      def on_touch_down(s, touch):
          if s.collide_point(touch.x,touch.y):    
              s.pos = [s.pos[1],s.pos[0]]     # This doesn't work anymore
              s.r = 1.0                       # Neither do this
  
  class TestApp(App):
      def build(s):
          parent = Widget()
          parent.add_widget(CircleWidget())
          return parent
  
  if __name__ == '__main__':
      TestApp().run()
  </code></pre>
  
  <p>The code runs and the event is actually called. More over, the Widget is moved (even if it is visually not clear) but the Instructions of the canvas are not updated.</p>
  
  <p>Any ideas?</p>