def build_ui(self, screen: Screen, current_scene: str): view_dict = defaultdict(list) for con in self.browser_controllers: scene_name, view = con.build_view(screen) view_dict[scene_name].append(view) scenes = [Scene(views, -1, name=name) for (name, views) in view_dict.items()] screen.set_scenes(scenes, start_scene=current_scene)
def screen_logic(self, screen: Screen): from datetime import datetime, timedelta t0 = datetime.now() try: for t in range(self.seconds + 1): # For best accuracy, calculate time till next "frame" based on actual time wait_for_it = t0 + timedelta(seconds=t) seconds_to_wait = (wait_for_it - datetime.now()).total_seconds() if seconds_to_wait > 0: time.sleep(seconds_to_wait) elif seconds_to_wait < -0.1: # Skip a frame if we're running late continue effects = [Print(screen, FigletText(str(self.seconds - t)), 0)] scene = Scene(effects, 40) screen.set_scenes([scene]) # Strange, it seems a few frames need to be skipped. for _ in range(10): screen.draw_next_frame(repeat=False) except StopApplication: return