Utiliser le module htinter

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.

Structure du programme

Côté python

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")
      

Côté html


	  <!doctype html>
	  <html lang="fr">
	    <head>
	      <title>Interface</title>
	      <meta charset="utf-8">
	    </head>
	    <body>
	    </body>
	  </html>
      

Les éléments importants sont

Interactions avec python

Déclencher un appel de fonction python depuis la page html

Par un clic

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>
      

Par les touches du clavier


		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']`.

Obtenir une valeur saisie sur la page

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")

      

Modifier un élément de la page html

Dans tous les cas, l'élément est identifié par son id.

Modifier le contenu

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)`

Modifier la valeur

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'")`

Modifier la classe

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)")`