Added spinner

This commit is contained in:
2021-03-05 15:55:14 +01:00
parent 236597848a
commit 570ede237e
3 changed files with 69 additions and 21 deletions

View File

@@ -1,4 +1,6 @@
import os
import sys
from collections import Callable
from typing import Union, Optional
import pyfiglet
@@ -7,6 +9,7 @@ from termcolor import colored
from cpl.console.background_color import BackgroundColor
from cpl.console.foreground_color import ForegroundColor
from cpl.console.spinner_thread import SpinnerThread
class Console:
@@ -203,3 +206,16 @@ class Console:
if not cls._is_first_write:
cls._output('', end='')
cls._output(string, x, y, end='')
@classmethod
def spinner(cls, message: str, call: Callable):
cls.write(message)
spinner = SpinnerThread(cls)
spinner.start()
call()
spinner.stop_spinning()
cls.write_line()
@classmethod
def flush(cls):
sys.stdout.flush()

View File

@@ -0,0 +1,31 @@
import threading
import time
class SpinnerThread(threading.Thread):
def __init__(self, console):
threading.Thread.__init__(self)
self._console = console
self._is_spinning = True
@staticmethod
def _spinner():
while True:
for cursor in '|/-\\':
yield cursor
def run(self) -> None:
spinner = self._spinner()
while self._is_spinning:
self._console.write(next(spinner))
time.sleep(0.1)
self._console.write('\b')
self._console.flush()
self._console.write(' ')
def stop_spinning(self):
self._is_spinning = False
time.sleep(0.1)