Cette biblithèque a pour objectif de pouvoir utiliser une page html comme interface graphique pour un programme python.
Le principe est de mettre en place un serveur http local qui gère, côté python, les interactions avec le navigateur web, et d'insérer un programme *javascipt* sur la page html d'interface, pour envoyer des requêtes à ce serveur et interpréter ses réponses.
Un programme utilisant une interface html *via* htinter doit adopter une structre particulière : il définit seulement des fonctions destinées à être appelées par les actions de l'utilisateur sur l'interface.
import htinter
# ici, des définitions de fonction
def fonction_d_initialisation( c, p ):
""" Fonction appelée à chaque chargement d'une page html """
htinter.init_page( fonction_d_initialisation )
htinter.servir(page="ma_page.html")
<!doctype html>
<html lang="fr">
<head>
<title>Interface</title>
<meta charset="utf-8">
</head>
<body>
</body>
</html>
Les éléments importants sont
Pour provoquer un appel de la fonction `mafonction` lors des clics sur l'élément dont l'id est `clic_ici`, on les relie avec l'appel `htinter.capture_clic("clic_ici",fnct=mafonction)` lors de l'initialsation de la page. La fonction doit prendre deux paramètres, e paramètre `p` permet d'obtenir l'id de l'élément sur lequel on a cliqué.
import htinter
def mafonction(c,p):
""" Fonction appelée en cas de clic sur l'élément d'id "clic_ici" """
print("Clic !")
def fonction_d_initialisation( c, p ):
""" Fonction appelée au chargement de la page html dans le navigateur """
htinter.capture_clic("clic_ici",fnct=mafonction)
htinter.init_page( fonction_d_initialisation )
htinter.servir(page="ma_page.html")
<!doctype html>
<html lang="fr">
<head>
<title>Interface</title>
<meta charset="utf-8">
</head>
<body>
<button id="clic_ici">Lancer la fonction !</button>
</body>
</html>
import htinter
def mafonction(c,p):
""" Fonction appelée en cas de clic sur l'élément d'id "clic_ici" """
print("Clic !")
def affiche_touche( c, p):
""" Fonction appelée lorsqu'une touche est pressée sur la page """
print (p['touche'])
def fonction_d_initialisation( c, p ):
""" Fonction appelée au chargement de la page html dans le navigateur """
htinter.capture_clic("clic_ici",fnct=mafonction)
htinter.écouter_touches(fnct=affiche_touche)
htinter.init_page( fonction_d_initialisation )
htinter.servir(page="ma_page.html")
La fonction appelée prend deux paramètres (c,p), la touche pressée est indiquée dans `p['touche']`.
On passe en paramètres de `htinter.lier_param` l'id de l'objet qui nous intéresse, et en second paramètre un nom qui sera utilisé pour transmettre la valeur aux fonctions appelées par les clic ou les touches.
Ainsi, on ajoute un champ de formulaire dont l'id est «champ» sur notre page d'interface
<!doctype html>
<html lang="fr">
<head>
<title>Interface</title>
<meta charset="utf-8">
</head>
<body>
<input type="text" id="champ">
<button id="clic_ici">Lancer la fonction !</button>
</body>
</html>
On demande ensuite au programme de mettre la valeur de ce champ dans le dictionnaire `p` passé en paramètre de toutes les fonction appelées par htinter, et on modifie `mafonction` pour l'afficher.
import htinter
def mafonction(c,p):
""" Fonction appelée en cas de clic sur l'élément d'id "clic_ici" """
print("Clic !")
print("Valeur du champ : ", p['val'])
def affiche_touche( c, p):
""" Fonction appelée lorsqu'une touche est pressée sur la page """
print (p['touche'])
def fonction_d_initialisation( c, p ):
""" Fonction appelée au chargement de la page html dans le navigateur """
htinter.capture_clic("clic_ici",fnct=mafonction)
htinter.écouter_touches(fnct=affiche_touche)
htinter.lier_param("champ","val")
htinter.init_page( fonction_d_initialisation )
htinter.servir(page="ma_page.html")
Dans tous les cas, l'élément est identifié par son id.
On agit ici sur un élément de type `div`, `p`, `section`...
Pour remplacer le contenu html: `htinter.contenu("id_de_l_objet","nouveau contenu")`
Pour ajouter du contenu html à la fin: `htinter.contenu("id_de_l_objet","contenu supplémentaire",True)`
On agit ici sur un élément qui a un attribut `value`, comme par exemple un champ de formulaire. On remplace sytématiquement son conteu.
Pour définir la nouvelle valeur: `htinter.valeur("id_de_l_objet","nouvelle 'value'")`
Ceci peut s'appliquer à n'importe quel élément identifié par son id et permet, par exemple, de changer sa couleur, le faire apparaître/disparaitre, etc.
Pour changer la classe: `htinter.classes("id_de_l_objet","nouvelle(s) classe(s)")`