2014-04-04 64 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

這正是我所期待的。謝謝 –