note that the badge uses the 'urlpath' option to indicate the app location
Based on this tutorial: https://elc.github.io/posts/embed-interactive-notebooks/
and this repository: https://github.com/oschuett/appmode
note that the badge uses the 'urlpath' option to indicate the app location
Based on this tutorial: https://elc.github.io/posts/embed-interactive-notebooks/
and this repository: https://github.com/oschuett/appmode
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# appmode example\n", | |
| "[](https://mybinder.org/v2/gist/gfacciol/2e66885b881b040e35712ecc3c75e10a/master?urlpath=%2Fapps%2Fappmode-notebook.ipynb)\n", | |
| "\n", | |
| "https://github.com/oschuett/appmode\n", | |
| "\n", | |
| "\n", | |
| "not sure if relevant ?\n", | |
| "\n", | |
| "https://makina-corpus.com/blog/metier/2019/augmenter-linteractivite-de-vos-notebooks-jupyter-1\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "# hide the appmode edit button not really secure \n", | |
| "# https://github.com/oschuett/appmode/issues/7" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%%javascript\n", | |
| "$('#appmode-leave').hide();\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": { | |
| "scrolled": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "from __future__ import print_function\n", | |
| "from ipywidgets import interact, interactive, fixed, interact_manual\n", | |
| "import ipywidgets as widgets\n", | |
| "import ipywidgets as ipw\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "outputtext = widgets.Text(placeholder=\"0\", layout=ipw.Layout(width=\"190px\"), disabled=True)\n", | |
| "\n", | |
| "\n", | |
| "#file = open(\"images/WidgetArch.png\", \"rb\")\n", | |
| "img = widgets.Image(\n", | |
| "# value=image,\n", | |
| " format='png',\n", | |
| "# width=300,\n", | |
| "# height=400,\n", | |
| ")\n", | |
| "\n", | |
| "d=0\n", | |
| "\n", | |
| "\n", | |
| "widgets.FileUpload(\n", | |
| " accept='', # Accepted file extension e.g. '.txt', '.pdf', 'image/*', 'image/*,.pdf'\n", | |
| " multiple=True # True to accept multiple files upload else False\n", | |
| ")\n", | |
| "\n", | |
| "\n", | |
| "uploader = widgets.FileUpload()\n", | |
| "\n", | |
| "#out = widgets.Output() # unused\n", | |
| " \n", | |
| " \n", | |
| "#\n", | |
| "#def derivative(img):\n", | |
| "# import matplotlib.pylab as plt\n", | |
| "# import numpy as np\n", | |
| "# \n", | |
| "# der = np.roll(img,1, axis=0) - img\n", | |
| "# \n", | |
| "## plt.figure()\n", | |
| "# plt.imshow(der)\n", | |
| "# return \"ok \"\n", | |
| "# \n", | |
| "# \n", | |
| "#def convert_image_to_numpy_array(img):\n", | |
| "# import io\n", | |
| "# from PIL import Image\n", | |
| "# import numpy as np \n", | |
| "# \n", | |
| "# imgx = Image.open(io.BytesIO(img.value))\n", | |
| "# imgx = np.array(imgx, dtype=float)\n", | |
| "# return imgx\n", | |
| "#\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "# process the file upload events (or call to load button)\n", | |
| "def tt(x):\n", | |
| " global d\n", | |
| " if not uploader.value == {}:\n", | |
| " ll = [ uploader.value[f][\"content\"] for f in uploader.value.keys()] \n", | |
| " img.value= ll[0]\n", | |
| " d=d-1\n", | |
| " \n", | |
| " #imgx = convert_image_to_numpy_array(img)\n", | |
| " #result = derivative(imgx)\n", | |
| " \n", | |
| " outputtext.value+=\"ok\" \n", | |
| " else:\n", | |
| " d=d+1\n", | |
| " outputtext.value='%d'%d\n", | |
| " \n", | |
| "\n", | |
| "# call upload event upon change of upload: https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Events.html\n", | |
| "uploader.observe(tt)\n", | |
| "\n", | |
| "\n", | |
| "# redundant with uploader\n", | |
| "#btn = widgets.Button(description='run', layout=widgets.Layout(width=\"150px\"))\n", | |
| "#btn.on_click(tt)\n", | |
| "\n", | |
| "\n", | |
| "widgets.VBox((uploader, #btn, \n", | |
| " outputtext, img))\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## example with a from \n", | |
| "https://github.com/oschuett/appmode/blob/master/example_app.ipynb" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "from __future__ import division\n", | |
| "import ipywidgets as ipw\n", | |
| "\n", | |
| "output = ipw.Text(placeholder=\"0\", layout=ipw.Layout(width=\"190px\"), disabled=True)\n", | |
| "\n", | |
| "def on_click(btn):\n", | |
| " if btn.description == \"=\":\n", | |
| " try:\n", | |
| " output.value = str(eval(output.value))\n", | |
| " except:\n", | |
| " output.value = \"ERROR\"\n", | |
| " elif btn.description == \"AC\":\n", | |
| " output.value = \"\"\n", | |
| " elif btn.description == \"del\":\n", | |
| " output.value = output.value[:-1]\n", | |
| " else:\n", | |
| " output.value = output.value + btn.description\n", | |
| "\n", | |
| "def mk_btn(description):\n", | |
| " btn = ipw.Button(description=description, layout=ipw.Layout(width=\"45px\"))\n", | |
| " btn.on_click(on_click)\n", | |
| " return btn\n", | |
| "\n", | |
| "row0 = ipw.HBox([mk_btn(d) for d in (\"(\", \")\", \"del\", \"AC\")])\n", | |
| "row1 = ipw.HBox([mk_btn(d) for d in (\"7\", \"8\", \"9\", \" / \")])\n", | |
| "row2 = ipw.HBox([mk_btn(d) for d in (\"4\", \"5\", \"6\", \" * \")])\n", | |
| "row3 = ipw.HBox([mk_btn(d) for d in (\"1\", \"2\", \"3\", \" - \")])\n", | |
| "row4 = ipw.HBox([mk_btn(d) for d in (\"0\", \".\", \"=\", \" + \")])\n", | |
| "ipw.VBox((output, row0, row1, row2, row3, row4))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## more examples with volume rendering\n", | |
| "\n", | |
| "https://github.com/binder-examples/appmode\n", | |
| "\n", | |
| "https://ipyvolume.readthedocs.io/en/latest/" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.7.8" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
| channels: | |
| - conda-forge | |
| dependencies: | |
| - appmode | |
| - pillow | |
| - matplotlib |