Progress Bars.ipynb
146 lines
| 4.2 KiB
| text/plain
|
TextLexer
Brian Granger
|
r9193 | { | |
"metadata": { | |||
"name": "Progress Bars" | |||
}, | |||
"nbformat": 3, | |||
"nbformat_minor": 0, | |||
"worksheets": [ | |||
{ | |||
"cells": [ | |||
{ | |||
"cell_type": "heading", | |||
"level": 1, | |||
"metadata": {}, | |||
"source": [ | |||
"Two Examples of Progress Bars" | |||
] | |||
}, | |||
{ | |||
"cell_type": "heading", | |||
"level": 2, | |||
"metadata": {}, | |||
"source": [ | |||
"A Javascript Progress Bar" | |||
] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"Here is a simple progress bar using HTML/Javascript:" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"import uuid\n", | |||
"import time\n", | |||
"from IPython.display import HTML, Javascript, display\n", | |||
"\n", | |||
"divid = str(uuid.uuid4())\n", | |||
"\n", | |||
"pb = HTML(\n", | |||
"\"\"\"\n", | |||
"<div style=\"border: 1px solid black; width:500px\">\n", | |||
" <div id=\"%s\" style=\"background-color:blue; width:0%%\"> </div>\n", | |||
"</div> \n", | |||
"\"\"\" % divid)\n", | |||
"display(pb)\n", | |||
"for i in range(1,101):\n", | |||
" time.sleep(0.1)\n", | |||
" \n", | |||
" display(Javascript(\"$('div#%s').width('%i%%')\" % (divid, i)))" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [], | |||
"prompt_number": 2 | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"The above simply makes a div that is a box, and a blue div inside it with a unique ID \n", | |||
"(so that the javascript won't collide with other similar progress bars on the same page). \n", | |||
"\n", | |||
"Then, at every progress point, we run a simple jQuery call to resize the blue box to\n", | |||
"the appropriate fraction of the width of its containing box, and voil\u00e0 a nice\n", | |||
"HTML/Javascript progress bar!" | |||
] | |||
}, | |||
{ | |||
"cell_type": "heading", | |||
"level": 1, | |||
"metadata": {}, | |||
"source": [ | |||
"ProgressBar class" | |||
] | |||
}, | |||
{ | |||
"cell_type": "markdown", | |||
"metadata": {}, | |||
"source": [ | |||
"And finally, here is a progress bar *class* extracted from [PyMC](http://code.google.com/p/pymc/), which will work in regular Python as well as in the IPython Notebook" | |||
] | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": true, | |||
"input": [ | |||
Thomas Kluyver
|
r9198 | "from __future__ import print_function\n", | |
Brian Granger
|
r9193 | "import sys, time\n", | |
"\n", | |||
"class ProgressBar:\n", | |||
" def __init__(self, iterations):\n", | |||
" self.iterations = iterations\n", | |||
" self.prog_bar = '[]'\n", | |||
" self.fill_char = '*'\n", | |||
" self.width = 50\n", | |||
" self.__update_amount(0)\n", | |||
"\n", | |||
" def animate(self, iter):\n", | |||
Thomas Kluyver
|
r9198 | " print('\\r', self, end='')\n", | |
Brian Granger
|
r9193 | " sys.stdout.flush()\n", | |
" self.update_iteration(iter + 1)\n", | |||
"\n", | |||
" def update_iteration(self, elapsed_iter):\n", | |||
" self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)\n", | |||
" self.prog_bar += ' %d of %s complete' % (elapsed_iter, self.iterations)\n", | |||
"\n", | |||
" def __update_amount(self, new_amount):\n", | |||
" percent_done = int(round((new_amount / 100.0) * 100.0))\n", | |||
" all_full = self.width - 2\n", | |||
" num_hashes = int(round((percent_done / 100.0) * all_full))\n", | |||
" self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'\n", | |||
" pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))\n", | |||
" pct_string = '%d%%' % percent_done\n", | |||
" self.prog_bar = self.prog_bar[0:pct_place] + \\\n", | |||
" (pct_string + self.prog_bar[pct_place + len(pct_string):])\n", | |||
"\n", | |||
" def __str__(self):\n", | |||
" return str(self.prog_bar)" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [], | |||
"prompt_number": 3 | |||
}, | |||
{ | |||
"cell_type": "code", | |||
"collapsed": false, | |||
"input": [ | |||
"p = ProgressBar(1000)\n", | |||
"for i in range(1001):\n", | |||
" time.sleep(0.002)\n", | |||
" p.animate(i)" | |||
], | |||
"language": "python", | |||
"metadata": {}, | |||
"outputs": [], | |||
"prompt_number": 4 | |||
} | |||
], | |||
"metadata": {} | |||
} | |||
] | |||
} |