VersionIntroductionInstallationLimitations du protocole "file"Questions fréquemment poséesSyntaxe, mots-clés et fonctions intégréesDistribution standardImplémentation de importPackages BrythonInterface 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 BrythonRecettes
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 |
module browser.workerLe module worker permet de faire fonctionner les WebWorkers en Brython. Un "travailleur" (worker) est un script Python qui reçoit des messages depuis un script principal, et qui lui renvoie des messages en réponse. Le travailleur est exécuté dans un fil d'exécution (thread) différent ; s'il doit réaliser des calculs complexes, cela permet de ne pas bloquer le script principal. Le script principal et le travailleur communiquent par messages. Un message doit être un objet Python "simple" : chaine de caractères, nombre, liste avec des items "simples", dictionnaires avec des clés et valeurs "simples". Un "travailleur" n'a pas accès à certaines fonctionnalités d'un script ordinaire: par exemple, il ne peut pas accéder au document affiché dans le navigateur, ni le modifier.Insérer un script travailleur dans une page HTMLPour insérer un script travailleur dans une page HTML, on utilise une forme particulière de la balise<script type="text/python"> :
<script type="text/python" class="webworker" id="myworker">
On peut aussi utiliser l'attribut src pour charger le script travailleur:
<script type="text/python" class="webworker" id="myworker" src="myworker.py"> </script>L'ajout de la classe "webworker" indique qu'il ne faut pas exécuter le script comme un script Python ordinaire, mais qu'il est destiné à être utilisé comme travailleur pour un script principal. L'attribut id permet au script principal de référencer le script travailleur.
Utilisation d'un travailleur depuis le script principalLe script principal crée un objet travailleur en utilisant la fonctioncreate_worker :
create_worker( worker_id, onready=None, onmessage=None, onerror=None)
déclenche la création d'un objet travailleur (voir ci-dessous), à partir du script référencé par l'identifiant worker_id (l'attributL'objet travailleur possède une méthode: send( message)
envoie un message au travailleur Fonctionnement d'un travailleurDans un travailleur, le module browser ne possède pas tous les attributs habituels qui permettent de manipuler un document : par exemple l'attributdocument n'est pas défini, ni le module html .
L'attribut window lui-même n'est pas défini; à la place, un attribut self
représente le travailleur et permet de gérer la relation avec le script
principal auquel il est associé.
L'objet browser.self possède les méthodes suivantes:
bind( evt, fonction)
associe la fonction à l'événement evt. L'événement principal est "message" : il est déclenché quand le script principal envoie un message au travailleur.
La fonction prend un seul paramètre, un objet événement qui possède
en particulier l'attribut
A noter qu'au lieu d'associer l'événement par la syntaxe def callback(evt): ... self.bind("message", callback)
on peut utiliser la fonction
from browser import bind, self @bind(self, "message") def callback(evt): ... send( message)
envoie un message au script principal ExempleLa galerie fournit un exemple de mise en oeuvre d'un Web Worker en Brython. Code du script principal:Code du travailleur:"""Main script.""" from browser import bind, document, worker result = document.select_one('.result') inputs = document.select("input") def onmessage(e): """Handles the messages sent by the worker.""" result.text = e.data def onready(myWorker): @bind(inputs, "change") def change(evt): """Called when the value in one of the input fields changes.""" # Send a message (here a list of values) to the worker myWorker.send([x.value for x in inputs]) # Create a web worker, identified by a script id in this page. worker.create_worker("worker", onready, onmessage) """Web Worker script.""" # In web workers, "window" is replaced by "self". from browser import bind, self @bind(self, "message") def message(evt): """Handle a message sent by the main script. evt.data is the message body. """ try: result = int(evt.data[0]) * int(evt.data[1]) workerResult = f'Result: {result}' # Send a message to the main script. # In the main script, it will be handled by the function passed as the # argument "onmessage" of create_worker(). self.send(workerResult) except ValueError: self.send('Please write two numbers') La classe
Pour la compatibilité ascendante, le module expose une class dépréciée pour
créer un travailleur dans le script principal
|