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
def update_screen(self, end_time, loop: asyncio.AbstractEventLoop, screen: Screen): screen.draw_next_frame() if loop.time() < end_time: loop.call_later(0.05, self.update_screen, end_time, loop, screen) else: loop.stop()
async def play_order_book(screen: Screen): while True: screen.draw_next_frame() await asyncio.sleep(0.05)