title: Is it possible to schedule Kivy StringProperty set() method using Clock?
body: <p>I would like to delay Kivy screen manager transition, which I can do for example like this:</p>
  
  <pre><code>#!/usr/bin/env python
  
  from kivy.app import App
  from kivy.lang import Builder
  from kivy.uix.floatlayout import FloatLayout
  from kivy.properties import StringProperty
  from kivy.uix.button import Button
  from kivy.clock import Clock
  
  Builder.load_string('''
  #: kivy 1.9.2
  #: import sm kivy.uix.screenmanager
  #: set base_font_size 25
  
  &lt;MainWidget&gt;:
      manager: screen_manager
  
      ScreenManager:
          id: screen_manager
          transition: sm.NoTransition()
          Screen:
              name: 'screen_one'  
              Button:
                  text: 'Screen 1, press to switch to Screen 2'
                  font_size: base_font_size
                  on_press:
                      root.manager.current = 'screen_two'
                      root.statusmsg = 'Screen 2, press to launch Armageddon'
  
          Screen:
              name: 'screen_two'
              Button:
                  text: root.statusmsg
                  font_size: base_font_size
                  disabled: True if root.statusmsg == 'Busy launching Armageddon' else False # prevent multiple activation
                  on_press:
                      root.deliver_payload()
  
  ''')
  
  
  class MainWidget(FloatLayout):
  
      statusmsg = StringProperty()
  
      def __init__(self, **kwargs):
          super(MainWidget, self).__init__(**kwargs)
  
      def deliver_payload(self, dt=0):
          if not dt: # called via on_press
              self.statusmsg = 'Busy launching Armageddon'
              # launch Armageddon here
              Clock.schedule_once(self.deliver_payload, 2)
          else: # scheduled via Clock
              self.manager.current = 'screen_one'
  
  
  class MyApp(App):
      def build(self):
          mw=MainWidget() 
          return mw
  
  
  if __name__ == '__main__':
      MyApp().run()
  </code></pre>
  
  <p>However, manager.current is a Kivy StringProperty and I should be able to assign a new value to it with the set() method and perhaps schedule this with Clock e.g. Clock.schedule_once(lambda dt: self.manager.property('current').set(??, 'screen_one'), 2).
  I wasn't able to find documentation for Kivy StringProperty set() method. It seems the method takes two args and the first argument needs to be of type kivy._event.EventDispatcher - according to traceback info that I get when I try some random guesses. Can anyone point to some documentation, or examples of use for the set() method? </p>
  
  <p>EDIT: I realise I did not make it clear what I want to do ultimately - I am asking if it is possible to schedule the Kivy property set() method using Kivy Clock. For example, I am able to toggle a Kivy BooleanProperty like this:</p>
  
  <pre><code>if self.property('myboolean').get(self):
      self.property('myboolean').set(self, False)
  else:
      self.property('myboolean').set(self, True)
  </code></pre>
  
  <p>But I was not able to schedule the method using Clock. The following line generated no errors but did not have any effect either:</p>
  
  <pre><code>Clock.schedule_once(lambda dt: self.property('myboolean').set(self, False),0)
  </code></pre>
  
  <p>In the case of Kivy StringProperty set() method, I was not even able to figure out what the 1st argument needed to be, so did not get as far as trying to schedule it with Clock. </p>
  
  <p>FURTHER EDIT:
  Although screen manager 'current' is a StringProperty according to documentation, it appears to behave somewhat differently. With a StringProperty I am able to do the following:</p>
  
  <pre><code>self.property('statusmsg').set(self, 'Armageddon now')
  </code></pre>
  
  <p>However, attempting something like this with manager.current does not succeed:</p>
  
  <pre><code>self.manager.property('current').set(self.manager, 'aux_screen')
  </code></pre>
  
  <p>The error message is:</p>
  
  <pre><code>   self.manager.property('current').set(self.manager, 'screen_one')
  TypeError: Argument 'obj' has incorrect type (expected kivy._event.EventDispatcher, got kivy.weakproxy.WeakProxy)
  </code></pre>
  
  <p>Confusing.</p>