Beispiel #1
0
 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)
Beispiel #2
0
    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