2014-04-04 62 views
0

问题是屏幕管理员,我有2个屏幕说加载屏幕和menuscreen。 在开始我加载加载屏幕第一次和3秒后,我把它切换到menuscreen哪些时间表的帮助。 在菜单屏幕上,我有一个按钮,当它被按下时,我们会回到加载屏幕。停留在屏幕3秒后切换屏幕

现在我想回到菜单屏幕后3秒加载屏幕是活动..有人可以建议最好的方式来做到这一点。下面是一个代码,它解释了我有什么,我需要什么:

我知道改变下面的代码,以使ClockScatchlevel(self.callNext,3)在LoadingScreen类将做这项工作,但我正在寻找一个更好的选择这是更有效率

from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen,FallOutTransition 
from kivy.properties import ObjectProperty,NumericProperty 
from kivy.uix.image import Image 
from kivy.graphics import Color 
from kivy.clock import Clock 


gui_v3 = ''' 
<PlayScreen>: 
    play_Button: playButton 
    canvas.before: 
     Color: 
      rgb: (0, 0, 1) 
    GridLayout: 
     rows:1 
     size_hint: .1,.1 
     pos_hint: {'center_x': .5, 'center_y': .5} 
     Button: 
      id: playButton 
      size_hint_x: None 
      width: 100 
      text: 'Play !' 
      font_size: 12 
      bold: True 
      italic: False 
      border: 10,10,10,10 
      color: (0.5, 1, 0.5, 1) 

      on_press: root.playButton_press() 
<LoadingScreen>: 
    canvas: 
     Color: 
      rgba: 0.4, 0.4, 0.4, 1 
     Rectangle: 
      pos: root.center 
      size: (32, 32) 
    BoxLayout: 
     Label: 
      text: 'JB' 
      font_size: 100 
     Label: 
      text: 'Loading...' 
      font_size: 10 

''' 


class PlayScreen(Screen): 
    play_Button = ObjectProperty(None) 

    def __init__(self, **kwargs): 
     super(PlayScreen, self).__init__(**kwargs) 
     Clock.schedule_interval(self.update, 1.0/2) 

    def update(self,dt): 
     print "Current screen is ",self.manager.current 


    def playButton_press(self): 
     print "Hi Play button is pressed" 
     sm.current = 'loading' 


class LoadingScreen(Screen): 
    def __init__(self, **kwargs): 
     super(LoadingScreen, self).__init__(**kwargs) 
     Clock.schedule_once(self.callNext, 3) 


    def callNext(self,dt): 
     self.manager.current = 'play' 
     print "Hi this is call Next Function of loading 1" 


# Create the screen manager 
Builder.load_string(gui_v3) 
sm = ScreenManager(transition= FallOutTransition()) 
sm.add_widget(LoadingScreen(name='loading')) 
sm.add_widget(PlayScreen(name='play')) 


class MyJB(App): 
    def build(self): 
     print sm.screen_names 
     return sm 

if __name__ == '__main__': 
    MyJB().run() 
+1

我没有看到什么效率会比做clock.schedule_once调用的一行代码更有效。 – brousch

回答

1

你应该使用屏幕的on_enter事件。只要做到这一点在KV文件:

<LoadingScreen>: 
    on_enter: Clock.schedule_once(self.callNext, 3) 

还需要导入时钟,#:import Clock kivy.clock.Clock的KV的顶部。现在每次打开屏幕时都会安排回拨。

+0

这正是我所期待的。谢谢 –