Grammalecte  Hex Artifact Content

Artifact b21d9bfaa8ea473c7033f22b45e8648da123e09b7731784111f7e7bdea747c63:


0000: 22 22 22 0a 54 65 78 74 75 61 6c 20 70 72 6f 67  """.Textual prog
0010: 72 65 73 73 62 61 72 0a 22 22 22 0a 0a 23 20 62  ressbar."""..# b
0020: 79 20 4f 6c 69 76 69 65 72 20 52 2e 0a 23 20 4c  y Olivier R..# L
0030: 69 63 65 6e 73 65 3a 20 4d 50 4c 20 32 0a 0a 69  icense: MPL 2..i
0040: 6d 70 6f 72 74 20 74 69 6d 65 0a 0a 63 6c 61 73  mport time..clas
0050: 73 20 50 72 6f 67 72 65 73 73 42 61 72 3a 0a 20  s ProgressBar:. 
0060: 20 20 20 22 54 65 78 74 75 61 6c 20 70 72 6f 67     "Textual prog
0070: 72 65 73 73 62 61 72 22 0a 0a 20 20 20 20 64 65  ressbar"..    de
0080: 66 20 5f 5f 69 6e 69 74 5f 5f 20 28 73 65 6c 66  f __init__ (self
0090: 2c 20 6e 4d 69 6e 3d 30 2c 20 6e 4d 61 78 3d 31  , nMin=0, nMax=1
00a0: 30 30 2c 20 6e 57 69 64 74 68 3d 37 38 29 3a 0a  00, nWidth=78):.
00b0: 20 20 20 20 20 20 20 20 22 69 6e 69 74 69 61 74          "initiat
00c0: 65 20 77 69 74 68 20 6d 69 6e 69 6d 75 6d 20 6e  e with minimum n
00d0: 4d 69 6e 20 74 6f 20 6d 61 78 69 6d 75 6d 20 6e  Min to maximum n
00e0: 4d 61 78 22 0a 20 20 20 20 20 20 20 20 73 65 6c  Max".        sel
00f0: 66 2e 6e 4d 69 6e 20 3d 20 6e 4d 69 6e 0a 20 20  f.nMin = nMin.  
0100: 20 20 20 20 20 20 73 65 6c 66 2e 6e 4d 61 78 20        self.nMax 
0110: 3d 20 6e 4d 61 78 0a 20 20 20 20 20 20 20 20 73  = nMax.        s
0120: 65 6c 66 2e 6e 53 70 61 6e 20 3d 20 6e 4d 61 78  elf.nSpan = nMax
0130: 20 2d 20 6e 4d 69 6e 0a 20 20 20 20 20 20 20 20   - nMin.        
0140: 73 65 6c 66 2e 6e 57 69 64 74 68 20 3d 20 6e 57  self.nWidth = nW
0150: 69 64 74 68 2d 39 0a 20 20 20 20 20 20 20 20 73  idth-9.        s
0160: 65 6c 66 2e 6e 41 64 76 61 6e 63 65 20 3d 20 2d  elf.nAdvance = -
0170: 31 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e 6e  1.        self.n
0180: 43 75 72 56 61 6c 20 3d 20 6e 4d 69 6e 0a 20 20  CurVal = nMin.  
0190: 20 20 20 20 20 20 73 65 6c 66 2e 73 74 61 72 74        self.start
01a0: 54 69 6d 65 20 3d 20 74 69 6d 65 2e 74 69 6d 65  Time = time.time
01b0: 28 29 0a 20 20 20 20 20 20 20 20 73 65 6c 66 2e  ().        self.
01c0: 5f 75 70 64 61 74 65 28 29 0a 0a 20 20 20 20 64  _update()..    d
01d0: 65 66 20 5f 75 70 64 61 74 65 20 28 73 65 6c 66  ef _update (self
01e0: 29 3a 0a 20 20 20 20 20 20 20 20 66 44 6f 6e 65  ):.        fDone
01f0: 20 3d 20 28 73 65 6c 66 2e 6e 43 75 72 56 61 6c   = (self.nCurVal
0200: 20 2d 20 73 65 6c 66 2e 6e 4d 69 6e 29 20 2f 20   - self.nMin) / 
0210: 73 65 6c 66 2e 6e 53 70 61 6e 0a 20 20 20 20 20  self.nSpan.     
0220: 20 20 20 6e 41 64 76 61 6e 63 65 20 3d 20 69 6e     nAdvance = in
0230: 74 28 66 44 6f 6e 65 20 2a 20 73 65 6c 66 2e 6e  t(fDone * self.n
0240: 57 69 64 74 68 29 0a 20 20 20 20 20 20 20 20 69  Width).        i
0250: 66 20 6e 41 64 76 61 6e 63 65 20 3e 20 73 65 6c  f nAdvance > sel
0260: 66 2e 6e 41 64 76 61 6e 63 65 3a 0a 20 20 20 20  f.nAdvance:.    
0270: 20 20 20 20 20 20 20 20 73 65 6c 66 2e 6e 41 64          self.nAd
0280: 76 61 6e 63 65 20 3d 20 6e 41 64 76 61 6e 63 65  vance = nAdvance
0290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
02a0: 6e 74 28 22 5c 72 5b 20 7b 7d 7b 7d 20 20 7b 7d  nt("\r[ {}{}  {}
02b0: 25 20 5d 20 22 2e 66 6f 72 6d 61 74 28 27 3e 27  % ] ".format('>'
02c0: 2a 6e 41 64 76 61 6e 63 65 2c 20 27 20 27 2a 28  *nAdvance, ' '*(
02d0: 73 65 6c 66 2e 6e 57 69 64 74 68 2d 6e 41 64 76  self.nWidth-nAdv
02e0: 61 6e 63 65 29 2c 20 72 6f 75 6e 64 28 66 44 6f  ance), round(fDo
02f0: 6e 65 2a 31 30 30 29 29 2c 20 65 6e 64 3d 22 22  ne*100)), end=""
0300: 29 0a 0a 20 20 20 20 64 65 66 20 69 6e 63 72 65  )..    def incre
0310: 6d 65 6e 74 20 28 73 65 6c 66 2c 20 6e 3d 31 29  ment (self, n=1)
0320: 3a 0a 20 20 20 20 20 20 20 20 22 69 6e 63 72 65  :.        "incre
0330: 6d 65 6e 74 20 76 61 6c 75 65 20 62 79 20 6e 20  ment value by n 
0340: 28 31 20 62 79 20 64 65 66 61 75 6c 74 29 22 0a  (1 by default)".
0350: 20 20 20 20 20 20 20 20 73 65 6c 66 2e 6e 43 75          self.nCu
0360: 72 56 61 6c 20 2b 3d 20 6e 0a 20 20 20 20 20 20  rVal += n.      
0370: 20 20 73 65 6c 66 2e 5f 75 70 64 61 74 65 28 29    self._update()
0380: 0a 0a 20 20 20 20 64 65 66 20 64 6f 6e 65 20 28  ..    def done (
0390: 73 65 6c 66 29 3a 0a 20 20 20 20 20 20 20 20 22  self):.        "
03a0: 74 6f 20 63 61 6c 6c 20 77 68 65 6e 20 69 74 e2  to call when it.
03b0: 80 99 73 20 66 69 6e 69 73 68 65 64 22 0a 20 20  ..s finished".  
03c0: 20 20 20 20 20 20 70 72 69 6e 74 28 22 5c 72 5b        print("\r[
03d0: 20 74 61 73 6b 20 64 6f 6e 65 20 69 6e 20 7b 3a   task done in {:
03e0: 2e 31 66 7d 20 73 20 5d 20 22 2e 66 6f 72 6d 61  .1f} s ] ".forma
03f0: 74 28 74 69 6d 65 2e 74 69 6d 65 28 29 20 2d 20  t(time.time() - 
0400: 73 65 6c 66 2e 73 74 61 72 74 54 69 6d 65 29 29  self.startTime))
0410: 0a                                               .