Added spinner
This commit is contained in:
@@ -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()
|
||||
|
31
src/cpl/console/spinner_thread.py
Normal file
31
src/cpl/console/spinner_thread.py
Normal 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)
|
Reference in New Issue
Block a user