title: Updating Progress Bar displayed in Popup in Kivy
body: <p>How do you update a progress bar that is displayed in Kivy. In the following example I get <code>AttributeError: 'super' object has no attribute '__getattr__'</code>. The issue is in the following line</p>
  
  <pre><code>self.ids.progress.value = value
  </code></pre>
  
  <p>I can see why since the <code>progressBar</code> widget is in <code>&lt;LoadingPopup&gt;</code> and not <code>&lt;MainScreen&gt;</code> but after trying several different things I can't reference the <code>progressBar</code> widget in <code>&lt;LoadingPopup&gt;</code> from the <code>do_update method</code>. </p>
  
  <p>Thanks in advance</p>
  
  <pre><code>import threading
  from functools import partial
  
  from kivy.lang import Builder
  from kivy.uix.floatlayout import FloatLayout
  from kivy.properties import StringProperty
  from kivy.uix.spinner import Spinner
  from kivy.app import App
  from kivy.clock import Clock
  from kivy.uix.popup import Popup
  
  
  
  Builder.load_string('''
  
  &lt;LoadingPopup&gt;:
      title: "Popup"
      size_hint: None, None
      size: 400, 400
      auto_dismiss: False
  
      BoxLayout:
          orientation: "vertical"
          ProgressBar:
              id: progress
              size_hint: (1.0, 0.06)
  
  &lt;MainScreen&gt;:
      BoxLayout:
          orientation: 'vertical'
  
          Spinner:
              id: first
              text: ' First Number'
              values: ['1','2','3','4','5','6','7','8','9']
  
          Spinner:
              id: second
              text: ' Second Number'
              values: ['1','2','3','4','5','6','7','8','9']
  
          Label:
              id: result
              text: ' Result'
              color: 0,0,0,1
          Button:
              id: res
              on_press: root.doit_in_thread(first.text,second.text)
              text: 'Multiply'
  
  
  ''')
  
  class LoadingPopup(Popup):
  
      def __init__(self, obj, **kwargs):
          super(LoadingPopup, self).__init__(**kwargs)
  
  
  class MainScreen(FloatLayout):
      changet = StringProperty()
      def __init__(self, **kwargs):
          super(MainScreen, self).__init__(**kwargs)
  
      def doit_in_thread(self, fir, sec):
          popup = LoadingPopup(self)
          popup.open()
          threading.Thread(target=partial(self.onMul, fir, sec, popup)).start()
  
      def do_update(self, value, text, *args):
          self.ids.progress.value = value
          self.ids.result.text = text
  
      def onMul(self,fir,sec, popup):
          a = (int(fir)*int(sec))
          print(a)
          b = 0
          old_value = 0
          endRange = 1000000
          for i in range(endRange):
              progress = int(((i+1)*100)/endRange)
              if progress != old_value and progress % 5 == 0:
                  text = str(b*(int(fir)*int(sec)))
                  Clock.schedule_once(partial(self.do_update, progress, text))
                  old_value = progress
              b+=1
  
          popup.dismiss()
  
  class TestApp(App):
      def build(self):
          return MainScreen()
  
  if __name__ == "__main__":
      TestApp().run()
  </code></pre>