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.htmlCe module définit des classes correspondant aux balises HTML, en majuscules. Les classes définies sont :
En suivant ce lien, vous trouverez la liste des balises HTML ainsi que leur documentation. Cette spécification est encore provisoire.La syntaxe pour créer un objet (par exemple un lien hypertexte) est : A( [content, [attributes]])
content est le noeud «fils» de l'objet ; il peut s'agir d'un objet Python comme une chaîne de caractères, un nombre, etc., ou bien une instance d'une autre classe du module html.
Si content est une chaine de caractères, elle est interprétée comme du
code HTML. Pour spécifier le contenu texte d'un élément il faut attribuer la
valeur à sa propriété
attributes est une suite de mots-clés correspondant aux attributs de la balise HTML. Les traits d'union (-) doivent être remplacés par des soulignés (_) : html.BUTTON("hello", **{"v-on:click": "count++"})
Voir aussi la fonction
Si content est un itérable autre qu'une chaine de caractères, tous les
éléments sont ajoutés comme descendants de l'élément. Par exemple :
crée une liste non ordonnée avec les baliseshtml.UL(html.LI('item %s' %i) for i in range(5)) <li> définies dans l'expression
générateur.
Pour l’attribut style, la valeur fournie doit être un dictionnaire :
oud = html.DIV('Brython', style={'height':100, 'width':200}) Les mots-clé de style doivent être écrits avec la syntaxe Javascript, pas CSS : backgroundColor et non background-color. Pour éviter les conflits avec le mot-clé de Python, l'attribut class doit être écrit avec une majuscule :d = html.DIV('Brython', style=dict(height=100, width=200)) On peut aussi créer un objet sans argument, puis le compléter :d = html.DIV('Brython', Class="container")
On peut aussi créer plusieurs éléments de même niveau par addition (symbole +) :link = html.A() link <= html.B("connexion") link.attrs["href"] = "http://example.com" et on peut ajouter tous les éléments d'un itérable en une seule opération :row = html.TR(html.TH('Nom') + html.TH('Prénom')) En combinant ces opérateurs et la syntaxe Python, voici comment créer une boîte de sélection à partir d'une liste :from browser.html import * t = TABLE() t <= TR(TH('Number') + TH('Square')) t <= (TR(TD(i) + TD(i * i)) for i in range(10)) Noter que la création d'une instance d'une classe relative aux balises HTML entraîne la création d'un unique objet DOM. Si on affecte l'instance à une variable, on ne peut pas l'utiliser à plusieurs endroits. Par exemple :from browser import document from browser.html import * document <= SELECT(OPTION(elt, value=i) for i, elt in enumerate(['one', 'two', 'three'])) le lien ne sera montré que dans la deuxième ligne. Une solution est de cloner l'objet initial :link = html.A('Python', href='http://www.python.org') doc <= 'Site officiel de Python : ' + link doc <= html.BR() + 'Je répète : le site est ' + link En général, les classes relatives au HTML ont des attributs portant le même nom que l’objet DOM correspondant. Par exemple, on a accès à l’option choisie par l’utilisateur au travers de l’attributlink = html.A('Python', href='http://www.python.org') doc <= 'Site officiel de Python : ' + link doc <= html.BR() + 'Je répète : le site est ' + link.clone() selectedIndex d’un objet SELECT .
Brython permet une approche encore plus pythonique avec quelques ajouts.
Voyons un exemple plus complet. Le code ci-dessous a généré la structure dans
la partie bleue (une div identifiée par id=container ). Nous allons insérer
une structure HTML fictive dans cette div : une div , un table , un form
et un canvas HTML5 :
Création de nouvelles balisesLe module expose la fonctionmaketag( nom)
Crée une nouvelle classe pour une balise avec le nom indiqué. On peut utiliser cette classe comme celles associées aux noms des balises HTML : Le module possède un autre attribut :p2 = maketag('P2') document <= p2('test') tags
Dictionnaire qui associe des noms de balises (chaines de caractères)
aux classes correspondantes. Si de nouvelles balises sont ajoutées
par la fonction
Génération des attributs HTML à partir de mots-clés Pythonattribute_mapper( attr)
Pour toutes les classes définies dans le module, cette fonction est appelée pour transformer les attributs passés comme mots-clés en attributs de la balise HTML. Par exemple: import re def f(attr): return re.sub("^v_(.*)_(.*)$", r"v-\1:\2", attr) html.attribute_mapper = f print(html.BUTTON("hello", v_on_click="count++").outerHTML) Par défaut, la fonction remplace les soulignés (_) par des tirets(-) |