在屏幕上停留3秒后切换屏幕
问题出在屏幕管理器上,我有两个屏幕,一个是加载屏幕(loadingscreen),另一个是菜单屏幕(menuscreen)。
一开始我先加载加载屏幕,然后过了3秒钟再切换到菜单屏幕,这个切换是通过时钟调度实现的。
在菜单屏幕上,我有一个按钮,按下这个按钮可以返回到加载屏幕。
现在我想在加载屏幕显示3秒后自动返回到菜单屏幕。有没有人能给我一个更好的方法来实现这个功能?下面是我现在的代码和我想要的效果:
我知道如果把下面的代码改成Clock.schedule_interval(self.callNext, 3)放在加载屏幕类里就能实现,但我在寻找一个更高效的选项。
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 个回答
1
你应该使用屏幕的 on_enter
事件。只需要在 kv 文件中这样做:
<LoadingScreen>:
on_enter: Clock.schedule_once(self.callNext, 3)
另外,在 kv 文件的顶部,你需要导入 Clock,写上 #:import Clock kivy.clock.Clock
。现在每次打开这个屏幕时,它都会安排这个回调。