Advertisement
GoodiesHQ

ProgressSpinner

Jun 27th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.34 KB | None | 0 0
  1. import threading
  2. import time
  3.  
  4. """A stupid simple, half-baked (literally) class to spin while something loads. Uses threading..."""
  5.  
  6. class ProgressSpin(threading.Thread):
  7.     def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=False, sleep=0.5, maximum=100.0):
  8.         super().__init__(group, target, name, args, kwargs, daemon=daemon)
  9.         self.sleep = sleep
  10.         self.value = 0
  11.         self.maximum = maximum
  12.         self.done = False
  13.  
  14.     @property
  15.     def progress(self):
  16.         return 100.0 * self.value / self.maximum
  17.  
  18.     @progress.setter
  19.     def progress(self, percentage):
  20.         if percentage > 100.0 or percentage < 0.0:
  21.             raise ValueError("Progress percentage should be a value between 0.0 and 100.0")
  22.         self.value = int(percentage * self.maximum)
  23.  
  24.     def run(self):
  25.         print()
  26.         i = 1
  27.         while i:
  28.             chars = {0: "/", 1: "-", 2: "\\", 3: "|"}
  29.             print("\r{} {:03.02f}%".format(chars.get(i % 4), self.progress), end="")
  30.             time.sleep(self.sleep)
  31.             i += 1
  32.             if self.done and i:
  33.                 i = -1  # Fuck you, I think it was clever...
  34. MAX = 500
  35. print("Counting objects...")
  36. p = ProgressSpin(sleep=0.25, maximum=MAX)
  37. p.start()
  38. for n in range(MAX+1):
  39.     p.value = n
  40.     time.sleep(0.01)
  41. p.done = True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement