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 |
Interactions avec JavascriptIl faut gérer la période transitoire où Brython va cohabiter avec Javascript ;-) Un document HTML peut intégrer des scripts ou des librairies Javascript, et des scripts ou des librairies Python. Cette page traite des interactions entre les programmes Python et les programmes Javascript, sous deux aspects:
Utilisation de données Javascript depuis des programmes BrythonLes noms qui sont ajoutés par les programmes Javascript à l'espace de noms Javascript sont accessibles depuis les scripts Brython comme attributs de l'objetwindow défini dans le module browser.
Par exemple :
<script type="text/javascript">Les objets Javascript sont convertis en leurs équivalents Python selon le tableau suivant :
is aux constantes NULL
et UNDEFINED du module javascript
(2) Les éléments du tableau Javascript sont convertis en objets Python selon
ce tableau de correspondance
(3) Si l'objet est une fonction, les arguments passés à la fonction Python sont
convertis dans l'appel de la fonction Javascript en utilisant le tableau
inverse de celui ci-dessus. Si l'argument est un dictionnaire Python, il est
converti en objet Javascript; les clés du dictionnaire Python sont converties
en chaines de caractères dans l'objet Javascript.
Les autres objets Javascript sont convertis en une instance de la classe
JSObject définie dans le module javascript. Les objets instance de la
classe Object peuvent être convertis en dictionnaire Python par:
Attention, une fonction Javascript ne peut pas être appelée avec des arguments par mots-clés, cela déclenche une exceptionpy_obj = window.js_obj.to_dict() TypeError : si la
fonction est définie par
function foo(x, y) et qu'on l'appelle depuis un script Brython par window.foo(y=0, x=1) la conversion des arguments dans le bon ordre n'est pas possible, parce que le script Brython ne connait pas la signature de la fonction Javascript. Utilisation de constructeurs Javascript dans un script BrythonSi une fonction Javascript est un constructeur d'objets, qu'on peut appeler dans du code Javascript avec le mot-clénew , on peut l'utiliser avec Brython
en utilisant la méthode spéciale new ajoutée par Brython à l'objet
Javascript.
Par exemple :
<script type="text/javascript"> ExceptionsEn cas d'erreur dans un script Javascript appelé par un script Brython, une exception de la classeJavascriptError est déclenchée et peut être
interceptée par le code Brython. La trace d'erreur Javascript est affichée
sur sys.stderr .
Exemple d'interface avec jQueryVoici un exemple plus complet qui montre comment utiliser la populaire librairie jQuery :<html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"> </script> <script src="/src/brython.js"></script> </head> <script type="text/python">from browser import window jq = window.jQuery # appel Ajax def onSuccess(data, status, req): print(data) print(status) jq.ajax('/cgi-bin/post_test.py', {'data': {'foo': 56}, 'success': onSuccess } ) # ajouter une option à un menu déroulant SELECT jq('#sel').append('<' + 'option>three') # accéder aux attributs d'un élément assert jq('#c').attr('id') == 'c' # définir une fonction associée au clic sur un bouton def callback(ev): print(jq(ev.target).text()) jq('#btn').on('click', callback) # on peut même utiliser "each" pour itérer sur des éléments def show(i, obj): print(i, obj) jq.each(jq('span'), show)</script> <body> <select id="sel"> <option value="one">one <option value="two">two </select> <span id="c"></span> <button id="btn">click</button> </body> </html> Autres exemplesVous trouverez dans la galerie d'autres exemples d'utilisation de librairies Javascript (Three, Highcharts, Raphael) dans des scripts Brython.Intégration d'une librairie Javascript dans un module PythonUne autre façon d'intégrer une librairie est de créer un module Python qui peut être importé par des scripts, sans que la librairie soit chargée dans la page du script. Pour cela, la librairie doit être accessible par un appel Ajax. Elle est chargée par la fonctionload(url) du module browser, et
les noms qu'elle ajoute à l'espace de noms global de Javascript sont
exposés dans le module Python.
Par exemple, on peut créer un module jquery:
On peut ensuite utiliser ce module dans une page Brython (notez qu'on n'y charge pas jquery):from browser import window, load load("/path/to/jquery.min.js") # jQuery ajoute le nom jQuery à l'espace de noms global Javascript # (aussi appelé $, mais ce n'est pas un identifiant Python valide) jq = window.jQuery <html> <head> <script src="brython.js"></script> </head> <body> <script type="text/python">import jquery jquery("#test").text("I can use jQuery here !")</script> <div id="test"></div> </body> </html> Utilisation de données Brython depuis des programmes JavascriptBrython n'expose par défaut que deux noms dans l'espace de noms global de Javascript :
Par défaut, un programme Javascript ne donc peut pas accéder aux objets
Brython. Par exemple, si on veut utiliser une fonction echo() définie dans
un script Brython pour réagir à un événement sur un élément de la page, au
lieu de la syntaxe
<button onclick="echo()">qui ne fonctionne pas puisque le nom echo n'est pas accessible depuis Javascript, il faut plutôt affecter un id à l'élément : <button id="echo">et définir le lien entre cet élément et un événement click par : Une autre possibilité est de forcer l'inscription de echo dans l'espace de noms Javascript en le définissant comme attribut de l'objetdocument['echo'].bind('click', echo) window du module
browser :
Cette méthode n'est pas recommandée, parce qu'elle introduit un risque de conflit avec des noms définis dans un programme ou une librairie Javascript utilisée dans la page.from browser import window window.echo = echo Propriétés de l'objet
L'objet |