##// END OF EJS Templates
Fix "Source" text for the "Other Syntax" section of the notebook...
Fix "Source" text for the "Other Syntax" section of the notebook Before it was shown as the "Display" one because of a missing end of line.

File last commit:

r9198:b62fdeca
r14105:0e5495d6
Show More
Progress Bars.ipynb
146 lines | 4.2 KiB | text/plain | TextLexer

Two Examples of Progress Bars

A Javascript Progress Bar

Here is a simple progress bar using HTML/Javascript:

In [2]:
import uuid
import time
from IPython.display import HTML, Javascript, display

divid = str(uuid.uuid4())

pb = HTML(
"""
<div style="border: 1px solid black; width:500px">
  <div id="%s" style="background-color:blue; width:0%%">&nbsp;</div>
</div> 
""" % divid)
display(pb)
for i in range(1,101):
    time.sleep(0.1)
    
    display(Javascript("$('div#%s').width('%i%%')" % (divid, i)))

The above simply makes a div that is a box, and a blue div inside it with a unique ID (so that the javascript won't collide with other similar progress bars on the same page).

Then, at every progress point, we run a simple jQuery call to resize the blue box to the appropriate fraction of the width of its containing box, and voilà a nice HTML/Javascript progress bar!

ProgressBar class

And finally, here is a progress bar class extracted from PyMC, which will work in regular Python as well as in the IPython Notebook

In [3]:
from __future__ import print_function
import sys, time

class ProgressBar:
    def __init__(self, iterations):
        self.iterations = iterations
        self.prog_bar = '[]'
        self.fill_char = '*'
        self.width = 50
        self.__update_amount(0)

    def animate(self, iter):
        print('\r', self, end='')
        sys.stdout.flush()
        self.update_iteration(iter + 1)

    def update_iteration(self, elapsed_iter):
        self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)
        self.prog_bar += '  %d of %s complete' % (elapsed_iter, self.iterations)

    def __update_amount(self, new_amount):
        percent_done = int(round((new_amount / 100.0) * 100.0))
        all_full = self.width - 2
        num_hashes = int(round((percent_done / 100.0) * all_full))
        self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'
        pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))
        pct_string = '%d%%' % percent_done
        self.prog_bar = self.prog_bar[0:pct_place] + \
            (pct_string + self.prog_bar[pct_place + len(pct_string):])

    def __str__(self):
        return str(self.prog_bar)
In [4]:
p = ProgressBar(1000)
for i in range(1001):
    time.sleep(0.002)
    p.animate(i)