title: How to resolve "invalid property name" error to make file chooser with kivy?
body: <p>I am new to kivy and am trying to build an application in which I have three tabs: one for loading the image, another for displaying the image and a grayscale version side by side, and finally, one tab for only showing the grayscale image.</p>
  
  <p>I have got the following from <a href="https://www.youtube.com/watch?v=6x1gUNoVB2I" rel="nofollow noreferrer">this link</a> and hope to use this for python 3, but I have repeatedly received the error below.</p>
  
  <blockquote>
    <p>Invalid property name</p>
  </blockquote>
  
  <p>This is the code I am currently using:</p>
  
  <pre><code>import kivy; 
  from kivy.app import App
  from kivy.uix.tabbedpanel import TabbedPanel
  from kivy.properties import ObjectProperty
  from kivy.lang import Builder
  from PIL import*
  
  Builder.load_string("""
  &lt;RootWidget&gt;:
   manager:manager
   img:img
   img3:img3
   img4:img4
   lab:lab
   do_default_tab:False
   ScreenManager:
      id:manager
      Screen:
          id:sc1
          name:'Load img'
          FileChooserIconView
              canvas.before:
                  Color:
                      rgb:0.5, 0.4, 0.5
                  Rectangle:
                      pos:self.pos
                      size: self.size
              on_selection:root.select_to(*args)
      Screen:
          id:sc2
          name:'Image'
          FloatLayout:
              Button:
                  id:lab
                  pos_hint:{"right": 0.55, 'top': 1}
                  size_hint:.15,0.1
  
          RelativeLayout:
              Image:
                  id:img
                  on_touch_down:str('Relative:{}'.format(args[1].pos))
                  post_hint:{"left": 1, 'bottom': 1}
                  size_hint:0.5, 1
                  allow_strech:True
          RelativeLayout:
              Image:
                  id:img3
                  post_hint:{"right": 1, 'bottom': 1}
                  size_hint:0.5, 1
                  allow_strech = True
          Screen:
              id:sc3
              name:'Image_'
              FloatLayout:
                  Image:
                      id:img4
                      keep_data:True
                      post:self.pos
                      size: self.size
      TabbedPanelHeader:
          text.sc1.name
          background_color: 1,0,0,1
          screen:sc1.name
      TabbedPanelHeader:
          text:sc2.name
          background_color: 1,1,0,1
          screen:sc2.name
      TabbedPanelHeader:
          text:sc3.name
          background_color: 1,0,1,1
          screen:sc3.name
  """)
  
  class RootWidget(TabbedPanel):
  
   manager = ObjectProperty(None)
  
   def on_touch_up(self, touch):
      if not self.img3.collide_point(*touch.pos):
          return True
      else:
          self.lab.text ='Pos: (%d,%d)' %(touch.x, touch.y)
          return True
  
   def switch_to(self, header):    
      # set the Screen manager to load  the appropriate screen
      # linked to the tab head instead of loading content
      self.manager.current = header.screen
      # we have to replace the functionality of the original switch_to
      self.current_tab.state = "normal"
      header.state = 'down'
      self._current_tab = header
   def select_to(self, *args):
      try:
          print(args[1][0])
          iw = Image.open(args[1][0])
          iw.save('./phase.jpg')
          gray = iw.convert('1')
          gray.save('.gray_im.jpg')
          self.img3.source = './gray_im.jpg'
          self.img4.source = './gray_im.jpg'
          self.img.source = './phase.jpg'
          self.img.reload()
          self.img3.reload()
          self.img4.reload()
      except:
          pass
  
   def update_touch_lavel(self, label, touch):
      label.text = 'Pos:(%d, %d)' % (touch.x, touch.y)
      label.texture_update()
      label.pos = touch.pos
      label.size = label.texture_size[0] + 20, label.texture_size[1] + 20
  
  class MainApp(App):
   title = 'Screen Widget'
   def build(self):
      return RootWidget()
   def on_pause(self):
      return True
  
  if __name__ == '__main___':
    MainApp().run()
  </code></pre>
  
  <p>I am unsure why I am receiving this error. I would greatly appreciate some help to fix the code to work as intended.</p>