the aim to have button on home screen, when pressed delay screen open. time delay of 5 seconds needed after screen return home.
my problem time delay linked button press, stops delay screen opening
from kivy.app import app kivy.lang import builder kivy.uix.screenmanager import screenmanager, screen, fadetransition kivy.uix.floatlayout import floatlayout import time builder.load_string(""" <mainscreen>: name: "main" floatlayout: canvas: rectangle: pos: self.pos size: self.size button: background_color: 1, .8, .3, 1 text:'home' size_hint: .8,.2 pos_hint: {'center_x':.5,'y':.1} on_press:root.manager.current = "delay" <timedelay>: name: "delay" floatlayout: button: color: 0,1,0,1 font_size: 25 size_hint: 0.3,0.2 text: "delay" pos_hint: {'center_x':0.5,'top':0.5} on_press:root.manager.current = "main" """) class mainscreen(screen): pass class timedelay(screen): time.sleep(5) sm.switch_to('main') sm = screenmanager() sm.add_widget(mainscreen(name='main')) sm.add_widget(timedelay(name='delay')) class timedelayapp(app): def build(self): return sm if __name__ == "__main__": timedelayapp().run()
you don't want use time.sleep() if don't want block ui. use kivy.clock instead.
it not clear me if want go screen 5 seconds after button press, or 5 seconds after entering screen. example come after button press:
from kivy.app import app kivy.lang import builder kivy.clock import clock, mainthread kivy.uix.screenmanager import screenmanager, screen, fadetransition kivy.uix.floatlayout import floatlayout kivy.uix.button import button kv_string = """ screenmanager: mainscreen: timedelay: <mainscreen>: name: "main" floatlayout: canvas: rectangle: pos: self.pos size: self.size button: background_color: 1, .8, .3, 1 text:'home' size_hint: .8,.2 pos_hint: {'center_x':.5,'y':.1} on_press: root.manager.current = "delay" <timedelay>: name: "delay" floatlayout: buttondelay: color: 0,1,0,1 font_size: 25 size_hint: 0.3,0.2 text: "delay" pos_hint: {'center_x':0.5,'top':0.5} ##on_press: root.manager.current = "main" on_press: self.clocked_switch() """ class mainscreen(screen): pass class timedelay(screen): pass class buttondelay(button): def clocked_switch(self): clock.schedule_once(self.switch_to_main, 5) def switch_to_main(self, *args): app = app.get_running_app() app.root.current = "main" class timedelayapp(app): def build(self): root_widget = builder.load_string(kv_string) return root_widget if __name__ == "__main__": timedelayapp().run()
if want go 5 seconds after entering screen, use similar clocked function call, screen.on_enter().
Comments
Post a Comment