Interface d'étalonnage

Bibliothèques utilisées

On utilisera :

  • Serial: Pour la communication avec l'Arduino
  • tkinter: Pour avoir une UI basique

Objectifs

  • Pour le capteur de couleur, afficher la couleur à partir des données reçues et pouvoir choisir les coefficients d'étalonnage
  • Pour le capteur de mouvement, afficher les coordonnées du gyroscopique, accéléromètre et de boussole.

Introduction à Tkinter

Liens
Import du package
import tkinter as tk
Première fenêtre

Notre premier modèle de fenêtre.

class PremiereFenetre(tk.Frame):
      def __init__(self, master=None):
      	  tk.Frame.__init__(self, master)
	  self.grid()
	  self.creerTexte()
 
      def creerTexte(self):
      	  self.texte = tk.Label(self, text='Bonjour')
	  self.texte.grid()
  • En premier lieu, on remarque que notre classe hérite de la classe tk.Frame.
  • Ensuite, on délégue la construction de la partie tk.Frame au constructeur de la classe.
  • On doit appeler la méthode grid pour rendre la fenêtre affichable.
  • On appelle ensuite creerTexte qui se charge de créer le texte Bonjour.
  • Dans la fonction creerTexte, on appelle le constructeur de la classe tk.Label. Le premier argument est la frame parent. Le reste permet de configurer davantage le widget.

Dans l'entrée du programme, on met:

pf = PremiereFenetre()
pf.mainloop()
Classes utiles
  • Frame: la brique de base qui contiendra nos widget
  • Label: Pour afficher du texte
  • Canvas: Pour afficher des formes
Un petit chronometre
class Chronometre(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()
        self.compteur = 0
        self.creerChrono()
        self.dessine()
 
    def dessine(self):
        self.chrono['text'] = str(self.compteur)
        self.compteur += 1
        self.chrono.after(1, self.dessine)
 
    def creerChrono(self):
        self.chrono = tk.Label(self, text=str(self.compteur))
        self.chrono.grid()
Un clignotant
class Clignotant(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master, height=256, width=256)
        self.grid()
        self.compteur = 0
        self.dessine()
 
    def dessine(self):
        self['bg'] = "#" + ("%02x" % ((self.compteur << 3) % 256))*3
        self.compteur += 1
        self.after(1, self.dessine)
Un tournant
class Tournant(tk.Canvas):
    def __init__(self, master=None):
        tk.Canvas.__init__(self, master, height=256, width=256)
        self.compteur = 0
        self.polygon = np.array([[-8, -8], [8, 8]])
        self.create_rectangle(*self.polygon.flat,  outline="red",
                              fill="yellow",
                              width=3,
                              tag="polygon") 
        self.grid()
        self.dessine()
 
    def unit_vector(self, r, w, t):
        return r*np.array([np.cos(w*t),
                           np.sin(w*t)])
 
    def dessine(self):
        self.compteur += 1
        self.coords("polygon",
                    *(self.polygon +
                      (128, 128) +
                      self.unit_vector(75, 1/32, self.compteur)
                    ).flat)
        self.after(1, self.dessine)