Version

Introduction

Installation

Limitations du protocole "file"

Questions fréquemment posées

Syntaxe, mots-clés et fonctions intégrées

Distribution standard

Implémentation de import

Packages Brython

Interface avec le navigateur

Introduction - API DOM
Créer un document
Accéder aux éléments
Attributs, propriétés et méthodes

Evénements
Evénements souris
Evénements clavier
Evénements focus
Evénements pour glisser-déposer

Chaine de requête

Interactions avec Javascript

Modules intégrés propres à Brython

browser
browser.aio
browser.ajax
browser.html
browser.local_storage
browser.markdown
browser.object_storage
browser.session_storage
browser.svg
browser.template
browser.timer
browser.webcomponent
browser.websocket
browser.worker

Widgets
browser.widgets.dialog
browser.widgets.menu

interpreter
javascript

Travailler avec Brython

Options d'exécution
Test et débogage
Deployer une application

Recettes

Salut !
Insérer du contenu dans un élément
Mise en forme HTML (gras, italique...)
Table HTML
Attacher / détacher des événements
Gérer la sélection d'options dans un SELECT
Glisser-déposer
Obtenir le contenu d'un élément
Lire le contenu d'un fichier
Stocker des objets localement
Exemple de onmouseover
 

Implémentation de import

Vous pouvez installer des modules ou des paquetages Python dans votre application, en les mettant à la racine de l'application ou dans des répertoires comportant un fichier __init__.py.

Noter que les modules doivent être encodés en utf-8 ; la déclaration d'encodage en début de module n'est pas prise en compte.

Par exemple l'application peut être composée des fichiers et répertoires suivants :

app.html
brython.js
brython_modules.js
brython_stdlib.js
index.html
users.py
utils.py
+ app
    __init__.py
    records.py
    tables.py

Un script Python dans app.html peut exécuter les imports

import users
import app.records

Avertissement : ceci ne fonctionne pas si le script est ouvert dans le navigateur par le menu Fichier / Ouvrir. En effet, comme le navigateur n'a pas accès directement au système de fichiers, les modules sont chargés par un appel Ajax, et les appels Ajax ne sont pas possibles quand la page est ouverte de cette façon.

Pour que ces imports fonctionnent, il faut ouvrir la page en lançant un serveur web permettant d'accéder à la page. Pour des tests en local, il suffit d'exécuter python -m http.server dans le répertoire où se trouve la page et de saisir localhost:8000/app.html dans la barre d'adresse du navigateur.

Si la bibliothèque standard a été insérée dans la page par

<script type="text/javascript" src="brython_stdlib.js"></script>

le script peut aussi exécuter

import datetime
import re

Pour importer des modules ou des paquetages, Brython utilise le même mécanisme que CPython : pour résoudre "import X", le programme recherche un fichier dans plusieurs emplacements :

  • un module X dans la bibliothèque standard
  • un fichier X.py dans le répertoire courant
  • un fichier __init__.py dans le sous-répertoire X du répertoire courant
  • un fichier X.py dans le répertoire site-packages de la bibliothèque standard
  • un fichier __init.py__ dans le répertoire site-packages/X de la bibliothèque standard

En outre, si une page HTML comporte plusieurs scripts Brython, ceux qui sont déjà exécutés peuvent être importés par leur id:

<script type="text/python" id="module">
def hello():
    return "world"
</script> <script type="text/python">
from browser import document
import module

document.body <= module.hello()
</script>

Optimisation

Le mécanisme décrit ci-dessus présente deux inconvénients :

  • la taille assez importante de brython_stdlib.js (plus de 4 Mo)
  • le temps pris par les appels Ajax

Pour optimiser les imports, si Brython a été installé par pip, vous pouvez générer un fichier brython_modules.js qui ne contient que les modules utilisés par l'application.

Pour cela il faut ouvrir une console système, se positionner dans le répertoire de l'application, et exécuter

brython-cli make_modules

A noter que ce programme analyse le code Brython contenu dans tous les scripts, modules et pages HTML qui se trouvent dans le répertoire et ses sous-répertoires. La version de CPython utilisée doit donc être compatible avec le code Brython : par exemple si ce code inclut des match / case, il faut au minimum CPython 3.10, sinon le programme détectera des erreurs de syntaxe.

Vous pouvez ensuite remplacer toutes les occurrences de

<script type="text/javascript" src="brython_stdlib.js"></script>

par

<script type="text/javascript" src="brython_modules.js"></script>